3

S- NxN稀疏矩阵。
A- Mx1 向量。

的非零值S是 的索引A
我想计算一个向量x,使得在的第i'th 条目中x:对于第'th 行中的
每个非零值,取并计算所有这些的总和并将其放入'th 的条目中。jiSA[j]jix

在伪它应该是这样的:

  for i = 1:N
     for j = 1:N
        if( s[i][j] != 0)
           x[i] += s[ A[i,j] ]

我怎样才能以最有效的方式在matlab中做到这一点?

4

3 回答 3

1

让我们尝试使用findand accumarray

[ii jj sij] = find( S );
x = accumarray( ii, A(sij), [1 size(S,1)] );
于 2015-04-16T10:17:07.647 回答
0

This is just matrix multiplication:

x = (S~=0)*A(1:size(S,2));

Matlab does matrix multiplication efficiently with sparse matrices, so this should be pretty fast.

于 2015-04-16T10:35:32.407 回答
0

这实际上就像 Shai 的答案,但使用 nonzeros(S) 代替 sij:

[ii jj] = find( S );
x = accumarray( ii, A(nonzeros(S)), [size(S,1), 1] ).' 
于 2015-04-16T15:09:41.123 回答