4

我想知道下面的问题是否有比使用循环更快的解决方案。

我有一组分散在 3D 空间中的点,每个点都有一个值。所以像dataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]. 3D 空间被均匀地分成子体积dx× dy× dz。我需要创建一个矩阵,其中包含v每个子卷中 ' 的总和。

子卷和数据点的数量可能非常大,每个数量级为 100 万。所以真的要避免循环。

我可以很容易地找出一个点属于哪个子卷:

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

但是现在我需要用相同的 tuple 将所有点相加(ix, iy, iz)。有任何想法吗?

4

1 回答 1

5

利用accumarray

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