遍历通过柱SciPy的稀疏矩阵(Iterating over scipy sparse matrix

2019-09-17 01:31发布

我试图找出如何通过列SciPy的稀疏矩阵迭代。 我试图计算每列的总和,然后由总重量以该列的成员。 我想要做的主要是:

for i=0 to #columns
  for j=0 to #rows
    sum=sum+matrix[i,j]
  for j=0to #rows
    matrix[i,j]=matrix[i,j]/sum

所有我在示例中看到的迭代器遍历整个矩阵一次,而不是做每列的。 有没有办法做我想要做什么?

Answer 1:

SciPy的稀疏矩阵有自己的sum方法,你可以使用这个。 例如:

A=sp.lil_matrix((5,5))
b=1+np.arange(0,5)
A.setdiag(b[:-1],k=1)
A.setdiag(b)


print(A)
  (0, 0)        1.0
  (0, 1)        1.0
  (1, 1)        2.0
  (1, 2)        2.0
  (2, 2)        3.0
  (2, 3)        3.0
  (3, 3)        4.0
  (3, 4)        4.0
  (4, 4)        5.0

f=A.sum(axis=0)

print(f)   
[[1. 3. 5. 7. 9.]]

返回的总和是一个密集numpy.matrix ,你可以转换成比例的因素:

print(A/f)
[[1.         0.33333333 0.         0.         0.        ]
 [0.         0.66666667 0.4        0.         0.        ]
 [0.         0.         0.6        0.42857143 0.        ]
 [0.         0.         0.         0.57142857 0.44444444]
 [0.         0.         0.         0.         0.55555556]]


文章来源: Iterating over scipy sparse matrix by column