Matlab中的3D分箱

4
我在以下问题中想知道除了使用循环之外是否有更快的解决方案。
我有一组点散布在三维空间中,每个点都有一个值。类似这样:dataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]。三维空间被均匀地分成子体积 dx × dy × dz。我需要创建一个矩阵,其中包含每个子体积中 v 的总和。
子体积的数量和数据点的数量可能相当大,约为 100 万。因此应该避免使用循环。
我可以轻松地找出一个点属于哪个子体积:
ix(:) = floor(x(:) / dx) + 1;
iy(:) = floor(y(:) / dy) + 1;
iy(:) = floor(z(:) / dz) + 1;

现在我需要将所有具有相同元组(ix, iy, iz)的点加起来。有什么想法吗?

1个回答

5

使用accumarray函数。

 sums = accumarray( { iy(:), ix(:), iz(:) }, v(:) ); 

始终为 accumarray() 加1 :) - Rody Oldenhuis
1
accumarraybsxfun 之间,我感觉相比我的同行们,我就像是 MATLAB 的神一样。 - Dang Khoa
谢谢!我真的需要掌握accumarray - texnic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接