在scipy中向密集矩阵添加密集向量(通过广播)

时间:2014-06-06 13:46:50

标签: python numpy scipy sparse-matrix

我想知道是否有办法简单地将一个密集向量添加到csr_matrix中表示为scipy.sparse的稀疏矩阵的所有行并返回一个稀疏矩阵,即尝试求和只有稀疏矩阵的非零元素。

如果我这样做:

import numpy as np
import scipy.sparse as sp
W = sp.csr_matrix(np.array([[0,0,1],[0,1,0]]))
v = np.array([2,3,4])

然后

sum = W + v

sum显然是一个密集的矩阵,但零数也相加。然而,当我尝试做的时候:

b = (W != 0)
s = b.multiply(v)
sum = W + s

我获得了正确的结果,但是作为一个密集的矩阵。 b是一个稀疏矩阵,但s不是。

1 个答案:

答案 0 :(得分:2)

正如我在评论中所说的那样,问题出现在multiply中,它应该为稀疏+密集输入生成稀疏矩阵,但不会。转换为稀疏格式以避免该问题:

>>> s = (W != 0).multiply(sp.csr_matrix(v))
>>> W + s
<2x3 sparse matrix of type '<type 'numpy.int64'>'
    with 2 stored elements in Compressed Sparse Row format>