Интересно, есть ли более быстрое решение проблемы ниже, чем использование циклов.3D binning в Matlab
У меня есть набор точек, разбросанных в трехмерном пространстве со значением, присвоенным каждой точке. Так что-то вроде dataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]
. 3D-пространство равномерно разбивается на подвыборы dx
× dy
× dz
. Мне нужно создать матрицу, содержащую сумму v
в каждом подвыполнении.
Количество подвыборов и точек данных может быть довольно большим, порядка 1 миллиона каждый. Поэтому циклы действительно следует избегать.
я могу легко узнать, что подтом точки принадлежит:
ix(:) = floor(x(:)/dx) + 1;
iy(:) = floor(y(:)/dy) + 1;
iy(:) = floor(z(:)/dz) + 1;
Однако теперь мне нужно сложить все очки с тем же кортежем (ix, iy, iz)
. Есть идеи?
Всегда +1 для 'accumarray()' :) –
Между 'accumarray' и' bsxfun' Я чувствую, что я бог MATLAB по сравнению с моими коллегами. –
Спасибо! Мне действительно нужно справиться с 'tankarray'. – texnic