Python 在稀疏csc_矩阵中查找非零项所在行的索引

Python 在稀疏csc_矩阵中查找非零项所在行的索引,python,numpy,scipy,sparse-matrix,Python,Numpy,Scipy,Sparse Matrix,我有一个numpy数组,X: type(X) >>> <class 'scipy.sparse.csc.csc_matrix'> 这给了我: (0, 0) 1 (2, 0) 1 (5, 0) 10 这很好,但我想要的是一个向量,里面有0,2,5 我如何获得我正在寻找的索引 感谢您的帮助。使用CSC矩阵,您可以执行以下操作: >>> import scipy.sparse as sps >>> a = np.array([

我有一个numpy数组,X:

type(X)
>>> <class 'scipy.sparse.csc.csc_matrix'>
这给了我:

(0, 0)  1
(2, 0)  1
(5, 0)  10
这很好,但我想要的是一个向量,里面有
0,2,5

我如何获得我正在寻找的索引


感谢您的帮助。

使用CSC矩阵,您可以执行以下操作:

>>> import scipy.sparse as sps
>>> a = np.array([[1, 0, 0],
...               [0, 1, 0],
...               [1, 0, 1],
...               [0, 0, 1],
...               [0, 1, 0],
...               [1, 0, 1]])
>>> aa = sps.csc_matrix(a)
>>> aa.indices[aa.indptr[0]:aa.indptr[1]]
array([0, 2, 5])
>>> aa.indices[aa.indptr[1]:aa.indptr[2]]
array([1, 4])
>>> aa.indices[aa.indptr[2]:aa.indptr[3]]
array([2, 3, 5])

所以
aa.index[aa.indptr[col]:aa.indptr[col+1]
应该能让你得到你想要的东西。

是的。CSR和CSC矩阵存储为三个数组:
数据
索引
、和
indptr
indptr
数组将每行/每列的偏移量存储到
索引
数组中。我明白了!因此,在这个解决方案中,我需要给
indptr
一个整数值,即列号。如果我想迭代稀疏矩阵的所有非零列,我会使用标准的
for
循环吗?出于某种原因,在稀疏矩阵上迭代感觉很奇怪。对于非零列中的值,您到底想做什么?几乎总是有一种方法可以避免迭代,但这完全取决于您想要做什么。谢谢您的回答。
>>> import scipy.sparse as sps
>>> a = np.array([[1, 0, 0],
...               [0, 1, 0],
...               [1, 0, 1],
...               [0, 0, 1],
...               [0, 1, 0],
...               [1, 0, 1]])
>>> aa = sps.csc_matrix(a)
>>> aa.indices[aa.indptr[0]:aa.indptr[1]]
array([0, 2, 5])
>>> aa.indices[aa.indptr[1]:aa.indptr[2]]
array([1, 4])
>>> aa.indices[aa.indptr[2]:aa.indptr[3]]
array([2, 3, 5])