使用 spfun 在 MATLAB 中进行稀疏矩阵乘法

Sparse matrix multiplication in MATLAB with spfun

我有一个大小为 (m,1) 的密集列矩阵 y 和一个大小为 (m,n) 的稀疏矩阵 x
我想使用 yx.
的每一列进行逐元素乘法 生成的稀疏矩阵的大小仍然是 (m,n).
稀疏矩阵 x,当加载到内存中时,大约是 10GB。
spfun 可以帮助我以高效记忆的方式实现我的目标吗?

我很难理解其背后的逻辑。

谢谢。

你试过了吗

out = bsxfun( @times, x, y ); 

spfun 更适合 element-wise 操作,其中您操作 x 的每个 non-zero 元素。它不完全适合 matrix-vector 元素明智的操作。
但是,如果你想沿着这条线做点什么,你可以尝试:

[ii jj xij] = find(x); %// extract non-zeros of x and their locations
out = sparse( ii, jj, xij.*y(ii), size(x,1), size(x,2) );

有关详细信息,请参阅 doc find