簡體   English   中英

在Matlab中進行3D分級

[英]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)來加起所有點。 有任何想法嗎?

使用accumarray

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM