将稀疏矩阵每列与向量相乘后求和

0 投票
1 回答
48 浏览
提问于 2025-04-13 00:54

我有一个很大的稀疏矩阵 X
还有一个向量 y,它的元素数量和 X 的行数是一样的。

我想计算每一列在与 y 相乘后得到的总和。
如果 X 是一个密集矩阵,这个操作就相当于 np.sum(X * y, axis=0)

那么,对于稀疏矩阵,有什么高效的方法可以做到这一点呢?

我试过:

z = np.zeros(X.shape[1])

for i in range(X.shape[1]):
  z[i] = np.sum(np.array(X[:, i]) * y)

但是速度非常慢。
有没有更好的方法来实现这个呢?

1 个回答

2

使用为稀疏矩阵提供的 dot 乘法:

X.transpose().dot(y) 

这样会更快。

另外要注意,你不能像你在例子中那样直接访问稀疏矩阵的元素。你需要使用 getcol 方法。

撰写回答