scipy:如何获取每一行的所有非零值索引?

时间:2013-01-16 17:48:04

标签: python numpy scipy

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

The lil_matrix class supports basic slicing and fancy indexing with a similar syntax to NumPy arrays.
。我已阅读关于索引的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.什么是获得每行所有非零值的最快方法?

2 个答案:

答案 0 :(得分:4)

对于第二个问题,请使用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]))

    """

答案 1 :(得分:2)

  

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

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

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

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