对指数求和

时间:2012-10-21 13:13:44

标签: matlab octave

假设我有

A = [10 20 30 40];
idx = [1 1 1 2];
result = [0 0];

我需要对idx中的索引求和,以便

result(1) = A(1) + A(2) + A(3);
result(2) = A(4);

我实现了代码

for i=1:length(idx)
  result(idx(i)) += A(i);
end

如果可能的话,如何将其转换为更加八度标准的代码?

1 个答案:

答案 0 :(得分:2)

看看accumarray,它完全符合您的要求,它只需要第一个输入作为列:

A = [10 20 30 40];
idx = [1 1 1 2];
result = accumarray(idx',A)

  result =

      60
      40

是的,这也适用于八度;)(link