我想知道是否有比使用循环更快的方法来解决下面的问题。
我有一组分散在三维空间中的点,每个点都有一个值所以有点像dataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]三维空间被均匀地分割成子体积我需要创建一个矩阵,包含每个子卷中dx的和。
子卷和数据点的数量可能相当大,每个数量约为100万个所以循环是必须避免的。
我很容易找到,一个点属于哪个子卷:

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

但是现在我需要用同一个元组把所有的点加起来有什么想法吗?

最佳答案

使用accumarray

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

07-26 03:53