在scipy中将稠密向量添加到稀疏矩阵(通过广播)

2 投票
1 回答
1314 浏览
提问于 2025-04-18 08:52

我在想有没有办法把一个稠密向量加到一个稀疏矩阵的所有行上,这个稀疏矩阵是用 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>

撰写回答