将总和与索引并行化

时间:2019-02-20 03:48:25

标签: matlab

很抱歉,标题可能不准确。但是我不确定它应该叫什么。

考虑索引向量id = [1,1,2]和数据向量d = [3,4,5]。我想要

A(id)=A(id)+d;

当然,我知道这是无效的。只要想知道是否有一种有效的方法(避免循环),如果length(id)= length(d)很长。

更准确地说,我想拥有

for ii=1:length(id)
  A(id(ii))=A(id(ii))+d(ii);
end

因此对于上面的示例,我希望A = [3 + 4,5] = [7,5]。

2 个答案:

答案 0 :(得分:2)

您可以使用accumarray

A = accumarray(id(:), d);

答案 1 :(得分:0)

经过一番思考,也许我应该扩展到另一个维度,以时间为代价。

dummy=zeros(max(id),length(d));
dummy(sub2ind(size(dummy),id,1:length(d)))=d;
A=sum(dummy,2);