我有3个数据集,两个有坐标,一个数据长度为n,有一个循环我会用这种方式分配数据
MAT = zeros(m, n);
for i = 1:n
MAT(Z(i), X(i)) = MAT(Z(i), X(i)) + DATA(i);
end
我想在没有循环的情况下这样做,因为我想要做的是:
MAT = zeros(m, n);
mn = size(MAT);
MAT(sub2ind(mn, Z, X)) = MAT(sub2ind(mn, Z, X)) + DATA;
任何人都知道如何正确有效地制作它?
干杯。
答案 0 :(得分:3)
你应该使用函数accumarray,例如: 让:
>> Z = [ 1 2 4 3 1];
>> X = [3 2 1 4 3];
>> D = [5 6 7 8 -10];
>> m = 4;n = 4;
然后我们有:
>> MAT = accumarray([Z(:),X(:)],D(:),[m,n])
MAT =
0 0 -5 0
0 6 0 0
0 0 0 8
7 0 0 0