[英]3D binning in Matlab
我想知道下面的問題是否比使用循環有更快的解決方案。
我有一組散布在3D空間中的點,每個點都有一個值。 所以像dataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]
dataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]
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)
來加起所有點。 有任何想法嗎?
sums = accumarray( { iy(:), ix(:), iz(:) }, v(:) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.