1

私は3つのデータセットを持っています。2つは座標を持ち、もう1つは長さ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 に答える