在Matlab中进行3D分级

时间:2013-06-18 19:39:11

标签: arrays matlab

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

我有一组散布在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;

但是现在我需要使用相同的元组(ix, iy, iz)来添加所有点。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

使用accumarray

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