4

ループを使用するよりも、以下の問題に対するより高速な解決策があるのだろうか。

各ポイントに値が割り当てられた、3D 空間に散在する一連のポイントがあります。のようなものdataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]です。dx3D 空間はサブボリューム× dy×に均等に分割されdzます。v各サブボリュームの の合計を含む行列を作成する必要があります。

サブボリュームとデータ ポイントの数は、それぞれ 100 万のオーダーで、非常に大きくなる可能性があります。したがって、ループは本当に避けるべきです。

ポイントがどのサブボリュームに属するかは簡単にわかります。

ix(:) = floor(x(:) / dx) + 1;
iy(:) = floor(y(:) / dy) + 1;
iy(:) = floor(z(:) / dz) + 1;

ただし、同じタプルですべてのポイントを合計する必要があり(ix, iy, iz)ます。何か案は?

4

1 に答える 1

5

使用するaccumarray

 sums = accumarray( { iy(:), ix(:), iz(:) }, v(:) ); 
于 2013-06-18T19:41:28.810 に答える