在scipy中将稠密向量添加到稀疏矩阵(通过广播)
我在想有没有办法把一个稠密向量加到一个稀疏矩阵的所有行上,这个稀疏矩阵是用 scipy.sparse
中的 csr_matrix
表示的,并且返回的结果还是稀疏矩阵,也就是说只对稀疏矩阵中非零的元素进行求和。
如果我这样做:
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 个回答
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>