2013-06-18 5 views
4

루프를 사용하는 것보다 빠른 문제 해결 방법이 있는지 궁금합니다.Matlab의 3D 비닝

각 지점에 값을 할당하여 3D 공간에 점 집합을 분산 시켰습니다. 그래서 dataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]과 같은 것입니다. 3D 공간은 서브 볼륨으로 균등하게 분할됩니다. dx × dy x dz. 각 서브 볼륨에 v의 합을 포함하는 행렬을 작성해야합니다.

서브 볼륨 및 데이터 포인트의 수는 각각 1 백만 개 정도로 매우 클 수 있습니다. 따라서 루프는 실제로 피해야합니다. 그러나 지금은 같은 튜플 (ix, iy, iz) 모든 점을 추가 할 필요가

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

: 포인트를 서브 볼륨

내가 쉽게 찾을 수는에 속한다. 어떤 아이디어?

답변

5

사용 accumarray

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

accumarray'에 대한 +1()': –

+1

accumarray'와 내가 같은 느낌'bsxfun''사이에 내 또래에 비해 MATLAB 신입니다. –

+0

고마워요! 나는 정말로 '누적 배열 (accumarray)'을 가지고 그립을 잡아야한다. – texnic