使用sub2ind在MatLab中分配索引

时间:2012-08-21 03:03:14

标签: matlab indexing

我有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;

任何人都知道如何正确有效地制作它?

干杯。

1 个答案:

答案 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