S
- N
x N
稀疏矩阵
A
- M
x1向量。
S
的非零值是A
的索引
我想计算一个向量x
,以便在i
的{{1}}条目中计算:{
对于x
的第j
行中的每个非零值i
,取S
并计算所有A[j]
&#的总和39;并将其放在j
的{{1}}条目中。
在伪它应该看起来像这样:
i
我怎么能以高效的方式在 matlab 中做到这一点?
答案 0 :(得分:1)
让我们尝试使用find
和accumarray
:
[ii jj sij] = find( S );
x = accumarray( ii, A(sij), [1 size(S,1)] );
答案 1 :(得分:0)
这只是矩阵乘法:
x = (S~=0)*A(1:size(S,2));
Matlab使用稀疏矩阵有效地进行矩阵乘法,因此这应该非常快。
答案 2 :(得分:0)
这实际上就像Shai的回答,但是使用非零(S)而不是sij:
[ii jj] = find( S );
x = accumarray( ii, A(nonzeros(S)), [size(S,1), 1] ).'