[英]How to iterate over a row in a SciPy sparse matrix?
I have a sparse matrix random matrix created as follows: 我有一个稀疏矩阵随机矩阵创建如下:
import numpy as np
from scipy.sparse import rand
foo = rand(100, 100, density=0.1, format='csr')
I want to iterate over the cells in a particular row and perform two calculations: 我想迭代特定行中的单元格并执行两个计算:
row1 = foo.getrow(bar1)
row2 = foo.getrow(bar2)
"""
Like the following:
sum1 = 0
sum2 = 0
for each cell x in row1:
sum1 += x
if the corresponding cell (in the same column) in row2 y is non-zero:
sum2 += x*y
"""
Here's an approach - 这是一种方法 -
# Get first row summation by simply using sum method of sparse matrix
sum1 = row1.sum()
# Get the non-zero indices of first row
idx1 = row1.indices
data1 = row1.data # Or get sum1 here with : `data1.sum()`.
# Get the non-zero indices of second row and corresponding data
idx2 = row2.indices
data2 = row2.data
# Get mask of overlap from row1 nonzeros on row2 nonzeros.
# Select those from data2 and sum those up for the second summation o/p.
sum2 = data1[np.in1d(idx1,idx2)].dot(data2[np.in1d(idx2,idx1)])
Alternatively, as suggested in comments by @user2357112
, we can simply use matrix-multiplication
to get the second summation - 或者,正如comments by @user2357112
所建议的comments by @user2357112
,我们可以简单地使用matrix-multiplication
得到第二个求和 -
sum2 = sum((row1*row2.T).data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.