1

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

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

干杯。

4

1 回答 1

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
于 2012-08-21T03:44:37.317 回答