J'ai un ensemble de données fonctionnant sur des millions de points de données en 3D. Pour le calcul que je fais, je dois calculer le voisin (recherche de plage) de chaque point de données dans un rayon, essayer d'ajuster une fonction, calculer l'erreur pour l'ajustement, répéter cela pour le prochain point de données et ainsi de suite. Mon code fonctionne correctement mais son exécution prend très longtemps, environ 1 seconde par point de données! C'est probablement parce que pour chaque point, il doit rechercher dans l'ensemble de données. Existe-t-il un moyen de rendre le processus rapide. J'ai une idée que si je peux en quelque sorte établir une relation d'adjacence entre les premiers voisins, cela peut être moins lent. Si cela aide, j'essaie de trouver la largeur de fenêtre Parzen optimale en 3D.
la source
Vous devriez certainement vérifier les arbres et octets KD qui sont les méthodes de choix pour les ensembles de points (tandis que les BSP sont pour les objets généraux et les grilles pour les densités plus ou moins uniformes). Ils peuvent être très compacts et rapides, minimisant la surcharge en mémoire et en calcul, et sont simples à implémenter.
Lorsque vos points sont plus ou moins uniformément répartis (même avec des zones vides, mais qu'il ne doit pas y avoir de singularité de densité ou d'autres concentrations élevées), vérifiez les emballages de sphères si vous souhaitez essayer une subdivision d'espace non hiérarchique de type grille.
la source
Vous devriez probablement envisager de construire la triangulation de Delaunay (enfin, son analogue 3D). En 2D, c'est une triangulation spéciale des points de données qui contient toujours le plus proche voisin. La même chose vaut en 3D, mais avec des tétraèdres.
J'espère que cela aide!
la source