ich habe folgendes "Problem": Ich würde gerne 2 unterschiedliche Punktwolken mit einander vergleichen. Wenn Punkt aus Menge A mit Punkt aus Menge B (zzgl. eines Sicherheitsfaktors oder Suchradius r) übereinstimmt, soll die Point ID des Punktes aus Menge B abgespeichert werden. Jeder Punkt hat jeweils eine Point ID und eine x,y und z Koordinate.
Mein Skript sieht bisher so aus, dass ich eine doppelte for schleife verwende, was teilweise dann halbe Tage vor sich her rechnet, da die Mengen A und B jeweils mehrere 100k Punkte enthalten. Daher die Frage, ob es dort auch effizientere Ansätze gibt
Nachdem ich beide Mengen als Liste/ Array mit dem Header "Point ID;x;y;z" importiert habe, sieht mein Code wie folgt aus. Zudem lösche ich alle bereits gefundenen Punkte aus der Menge B raus, damit sie nicht nochmal durchsucht werden.
Code: Alles auswählen
l_result=[] #Ergebnis Liste
n=0
for j in list_A:
#Umwandeln String in float
A_x = float(list_A[n]["x"])
A_y = float(list_A[n]["y"])
A_z = float(list_A[n]["z"])
m=0
for i in list_B:
#Umwandeln String in float
B_x = float(list_B[m]["x"])
B_y = float(list_B[m]["y"])
B_z = float(list_B[m]["z"])
#Vergleich
if A_x-r<=B_x and A_x+r>=B_x and A_y-r<=B_y and A_y+r>=B_y and A_z-r<=B_z and A_z+r>=B_z:
l_result.append(str(list_B[m]["Point ID"]))
list_B.remove(list_B[m])
else:
m=m+1
n=n+1