2013-06-18 31 views
4

我不知道下面的問題是否比使用循環有更快的解決方案。在Matlab中進行3D裝倉

我有一組分散在三維空間中的點,併爲每個點分配一個值。所以像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)加起來所有的點。有任何想法嗎?

回答

5

使用accumarray

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

始終爲'accumarray +1()':) –

+1

之間'accumarray'和'bsxfun'我覺得我比我的同齡人一個MATLAB神。 –

+0

謝謝!我真的需要去處理'accumarray'。 – texnic