【问题标题】:scipy: how to get all non-zero value index for each row?scipy:如何获取每一行的所有非零值索引?
【发布时间】:2013-01-17 12:28:35
【问题描述】:

我找不到更多关于 scipy.sparse 索引的信息,除了 SciPy v0.11 参考指南,它说

lil_matrix 类支持基本的切片和花式索引,其语法与 NumPy 数组类似。
。我已经阅读过关于索引的numpy文档,但我没有清楚地理解它,例如,
Asp = sparse.lil_matrix((3,3))
Asp.setdiag(zeros(3))
Asp[0, 1:3] = 10
print Asp.todense()

1。 为什么输出是

[[ 0. 10. 10.]
 [ 0. 0. 0.]
 [0.0.0.]]

[0,1:3] 是什么意思?如果我使用

Asp[0, 1:2,3] = 10

有一个错误:

IndexError: invalid index
,不知道是什么原因。

2.获取每行所有非零值的最快方法是什么?

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    对于第二个问题,请使用nonzero() 方法。我不得不翻遍the source 才能找到它,因为我在任何参考文档中都找不到它。

    def nonzero(self):
        """nonzero indices
    
        Returns a tuple of arrays (row,col) containing the indices
        of the non-zero elements of the matrix.
    
        Examples
        --------
        >>> from scipy.sparse import csr_matrix
        >>> A = csr_matrix([[1,2,0],[0,0,3],[4,0,5]])
        >>> A.nonzero()
        (array([0, 0, 1, 2, 2]), array([0, 1, 2, 0, 2]))
    
        """
    

    【讨论】:

    • @Jaime,非常好。奇怪的是我找不到 scipy.sparse 矩阵也可以使用它,但也许这是假设的?
    • @fizzisist 太糟糕了,我应该更仔细地阅读内容...在 Methods 部分列出了很多稀疏矩阵方法,但文档很少相应的稀疏矩阵类文档。如果你向下滚动here,你会找到它,nonzero 是列表的一部分,链接到 this page,在我所知道的其他地方没有链接,所以肯定很难找到。
    【解决方案2】:

    [0,1:3] 是什么意思?

    这意味着:第 0 行,元素 13(独占)。由于 Numpy 和 Scipy 使用从零开始的索引,因此第 0 行是第一行,1:3 表示第一列和第二列。

    Asp[0, 1:2,3] 无效,因为您有三个索引,01:23。矩阵只有两个轴。

    这都是标准的 Numpy 东西;阅读有关该软件包的任何好的教程。

    【讨论】:

    • 谢谢。你能告诉我获取每行所有非零值的最快方法是什么吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 2016-11-21
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2018-05-22
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多