use*_*497 5 python numpy matrix
我试图在稀疏矩阵中按行查找非零项的索引:scipy.sparse.csc_matrix.到目前为止,我正在遍历矩阵中的每一行,并使用
numpy.nonzero()
Run Code Online (Sandbox Code Playgroud)
到每一行获取非零列索引.但是这种方法需要花费一个多小时才能找到每行的非零列条目.有快速的方法吗?谢谢!
使用该.nonzero()
方法.
indices = sp_matrix.nonzero()
Run Code Online (Sandbox Code Playgroud)
如果你想将索引作为(row, column)
元组,你可以使用zip
.
indices = zip(*sp_matrix.nonzero())
Run Code Online (Sandbox Code Playgroud)
对于企业社会责任矩阵来说,它相对简单,因此您始终可以这样做:
>>> a = sps.rand(5, 5, .2, format='csc')
>>> a.A
array([[ 0. , 0. , 0.68642384, 0. , 0. ],
[ 0.46120599, 0. , 0.83253467, 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0.07074811],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0.21190832, 0. , 0. , 0. ]])
>>> b = a.tocsr()
>>> np.split(b.indices, b.indptr[1:-1])
[array([2]), array([0, 2]), array([4]), array([], dtype=float64), array([1])]
Run Code Online (Sandbox Code Playgroud)
如果你使用coo_matrix,这将非常容易,并且coo/csr/csc之间的转换非常快。分别获取所有行索引和列索引可以如下完成:
sp_matrix = sp_matrix.tocoo()
row_ind = sp_matrix.row
col_ind = sp_matrix.col
Run Code Online (Sandbox Code Playgroud)
但是您也可以同时获取任何这些稀疏矩阵类型的两组索引,这可能是最简单的:
rows, cols = X.nonzero()
Run Code Online (Sandbox Code Playgroud)
如果您需要查找特定行中的值,csc 和 csr 矩阵将返回按行排序的非零条目,coo 似乎返回按列排序的索引。
In [1]: X = coo_matrix(([1, 2, 3, 4, 5, 6], ([0, 2, 2, 0, 1, 2], [0, 0, 1, 2, 2, 2])))
In [2]: X.todense()
Out[2]:
matrix([[1, 0, 4],
[0, 0, 5],
[2, 3, 6]])
In [3]: X.nonzero()
Out[3]:
(array([0, 2, 2, 0, 1, 2], dtype=int32),
array([0, 0, 1, 2, 2, 2], dtype=int32))
In [4]: X.tocsr().nonzero()
Out[4]:
(array([0, 0, 1, 2, 2, 2], dtype=int32),
array([0, 2, 2, 0, 1, 2], dtype=int32))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7402 次 |
最近记录: |