es wäre sehr hilfreich, wenn ihr mir einen Hinweis zur Verbesserung meines Codes geben könntet.
Ich bin Neuling, dh. falls ich offensichtliche Sachen übersehen habe, war es keine Absicht.
Die Ausgangslage ist folgende:
ein Gegenstand liegt als 3D-Punktwolke vor
--> es existiert ein Textfile mit zigtausend Koordinaten (x,y,z) =test
derselbe Gegenstand, der sich aber im Laufe der Zeit leicht verändert hat, soll verglichen werden, um die Veränderungen zu zeigen
--> noch ein Textfile mit zigtausend Koordinaten =test2
Prinzip: Alle Punkte, die in beiden Files vorkommen raus und die welche nur einmal vorkommen sollten dann die "Veränderungspunkte" sein.
Aber die Punkte sind nicht bis auf die letzte Dezimale gleich und daher muss ein Pufferbereich eingebaut werden.
--> Gedanklich: Kugel um Punkt a und wenn Punkt b innerhalb des Radius liegt ignorieren,
ansonsten in ein neues Textfile schreiben... welches dann die Veränderungspunkte enthalten sollte.
-->Rechnerisch gelöst über Vektorrechnung:
Vektor mit Anfangspunkt u und Endpunkt b --> Ist der Vektor länger als das als Puffer gesetzte Limit, sollte es sich um einen Veränderungspunkt handeln.
Leider musste ich nach 5 Tagen den ersten Durchlauf abbrechen, weil das einfach viel zu lange dauert (habe rund 50 Gegenstände, die so verglichen werden sollen)
Was denkt ihr, wäre der beste Weg die Berechnung schneller durchzuführen? Cython?
Oder habe ich einfach nur einen unnötigen Schritt in den Code gebaut und es ginge viel eleganter?
(Oder falls jemandem ein anderer Weg zur Lösung des Problems einfällt... )
Bin für jeden Hinweis dankbar!
Code: Alles auswählen
import numpy as np
vorher = np.genfromtxt("Dateipfad/test.asc")
nachher = np.genfromtxt("Dateipfad/test2.asc")
anders = []
limit = 29
for a in vorher:
for b in nachher:
vec = a - b
length = np.sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2])
if length < limit:
anders.append(b)