Je me demande s'il existe une solution plus rapide au problème ci-dessous que d'utiliser des boucles.Binning 3D dans Matlab
J'ai un ensemble de points dispersés dans l'espace 3D, avec une valeur affectée à chaque point. Donc, quelque chose comme dataPoints = [x1, y1, z1, v1; x2, y2, z2, v2; ...]
. L'espace 3D est divisé également en sous-volumes dx
× dy
× dz
. J'ai besoin de créer une matrice contenant la somme de v
dans chaque sous-volume.
Le nombre de sous-volumes et de points de données peut être assez important, de l'ordre de 1 million chacun. Donc, les boucles sont vraiment à éviter.
Je peux facilement savoir, ce qui sous-volume un point appartient à:
ix(:) = floor(x(:)/dx) + 1;
iy(:) = floor(y(:)/dy) + 1;
iy(:) = floor(z(:)/dz) + 1;
Mais maintenant, je dois ajouter tous les points avec le même tuple (ix, iy, iz)
. Des idées?
toujours un +1 pour 'accumArray()' ':) –
Entre accumarray' et' bsxfun' Je me sens comme je suis un dieu Matlab par rapport à mes pairs. –
Merci! J'ai vraiment besoin de me familiariser avec 'accumarray'. – texnic