Ich habe einen Datensatz, der in Millionen von Datenpunkten in 3D läuft. Für die Berechnung, die ich mache, muss ich Nachbarn (Entfernungssuche) für jeden Datenpunkt in einem Radius berechnen, versuchen, eine Funktion anzupassen, den Fehler für die Anpassung berechnen, dies für den nächsten Datenpunkt wiederholen und so weiter. Mein Code funktioniert einwandfrei, die Ausführung dauert jedoch sehr lange, etwa 1 Sekunde pro Datenpunkt! Dies liegt wahrscheinlich daran, dass für jeden Punkt der gesamte Datensatz durchsucht werden muss. Gibt es eine Möglichkeit, den Prozess zu beschleunigen? Ich habe die Idee, dass, wenn ich irgendwie eine Nachbarschaftsbeziehung zwischen den ersten Nachbarn herstellen kann, dies weniger langsam sein kann. Wenn es hilft, versuche ich, die optimale Parzen-Fensterbreite in 3D zu finden.
quelle
Sie sollten auf jeden Fall KD-Bäume überprüfen und Octrees die die Methode der Wahl für Punktmengen sind (während BSPs für allgemeine Objekte und Gitter für mehr oder weniger gleichmäßige Dichten gelten). Sie können sehr kompakt und schnell sein, den Speicher- und Rechenaufwand minimieren und sind einfach zu implementieren.
Wenn Ihre Punkte mehr oder weniger gleichmäßig verteilt sind (auch bei leeren Bereichen, es darf jedoch keine Dichte-Singularität oder andere hohe Konzentration geben), überprüfen Sie die Kugelpackungen, wenn Sie eine gitterartige, nicht hierarchische Raumunterteilung versuchen möchten.
quelle
Sie sollten sich wahrscheinlich überlegen, die Delaunay-Triangulation zu erstellen (nun, ihre 3D-Analogie). In 2D ist dies eine spezielle Triangulation der Datenpunkte, die immer den nächsten Nachbarn enthält. Das gleiche gilt in 3D, aber mit Tetraedern.
Sie können die Triangulation ein für alle Mal erstellen und dann direkt in der Triangulation nach dem nächsten Nachbarn suchen. Ich denke, dass es einige gute Algorithmen gibt, um die Triangulation zu erstellen: In 2D befindet sich die Konstruktion der Triangulation inn log( n ) und die spätere Suche nach dem nächsten Nachbarn ist in der Anzahl der Datenpunkte linear.
Ich hoffe es hilft!
quelle