很抱歉,标题可能不准确。但是我不确定它应该叫什么。
考虑索引向量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]。
答案 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);