Ich habe verschiedene Möglichkeiten zum Abgleichen von Werten untersucht und bin mir nicht sicher, welche die beste Option in diesem Fall ist. Was ich habe, bin 1) und Eingangstabelle von 4 Spalten und 316 Zeilen: x, y, dx, dy:Vergleichen eines Werts aus einer Tabelle mit einer Reihe vorhandener Korrekturen (in einem Raster) nach Entfernung
-233200.0 -233200.0 -19.4 21.4
-212000.0 -233200.0 -23.7 23.8
-190800.0 -233200.0 -26.8 26.4
-169600.0 -233200.0 -39.0 33.5
-148400.0 -233200.0 -39.0 33.5
-127200.0 -233200.0 -46.0 38.4
-106000.0 -233200.0 -47.2 38.2
-84800.0 -233200.0 -49.3 38.8
-63600.0 -233200.0 -50.8 35.8
-42400.0 -233200.0 -49.4 32.1
My zweite Tabelle ist ein ähnliches Tier der Länge 529: index, Kx, Ky, KDX, kdy:
1 -3995 213531 -44.1 32.7
2 -25446 213433 -48.6 37.0
3 -3175 169047 -44.7 19.7
4 -831 40968 -8.7 -15.1
5 -2771 147269 -33.1 1.3
6 -43705 82864 3.5 -5.3
7 -24925 191012 -46.2 30.4
8 -25982 236253 -58.1 48.8
9 -46318 191012 -48.2 31.2
Das Ziel ist, für jede der x, y (316 Punkte), würde Ich mag den nächsten Punkt Kx, Ky zu finden und eine Liste zurück, die x, y, dx, dy, Kx, Ky, Kdx, Kdy.
diese Dateien einlesen ich einen Abstand dmin erstellen können, die mit 316 Punkten ist lang:
dmin=[]
for i in range(len(xf)):
for y in range(len(xK)):
dist=np.sqrt((x[i]-xK[y])*(x[i]-xK[y])+(y[i]-yK[y])*(y[i]-yK[y]))
dmin.append(np.min(dist))
Allerdings, wenn ich versuche, XK, YK dxk zurückzukehren, DYK ich 316 Werte, die nur die Hälfte decken Bereich von der x, y ursprünglichen 316 Raster von Punkten.
for i in range(len(xf)):
for y in range(len(xKnn)):
dist=np.sqrt((x[i]-xK[y])*(x[i]-xK[y])+(y[i]-yK[y])*(y[i]-yK[y]))
dmin.append(np.min(dist))
ymatch.append(yKnn[i])
xmatch.append(xKnn[i])
dxmatch.append(dxKnn[i])
dymatch.append(dyKnn[i])
Ich habe bei Umsetzung in den Pandas sieht aus, als ich die Tische kommen könnte, wenn ich einen Index schreiben könnte, die bei Kx, Ky aktualisieren würde, wenn dmin wahr ist.
d={'x': x, 'y': y, 'dx': dx, 'dy': dy}
df=pd.DataFrame(data=d)
dKnn={'xK': xK, 'yK': yK, 'dxK': dxK, 'dyK': dyK}
dfKnn=pd.DataFrame(data=dKnn)
aber hier lief ich in Probleme, da ich nicht eine dKnn Spalte aus dem kleineren Datenrahmen definieren könnte.
Endlich habe ich die scipy.spatial.KDTree Routine durchsucht, aber da es so aussieht, als ob es nur ein einzelnes Array akzeptieren würde, war ich nicht in der Lage, einen passenden dxK, dyK zu finden. Es scheint, als ob der Pandas Datenrahmen der hoffnungsvollste Weg nach vorne ist, aber ich bin sehr steckengeblieben, so dass alle Vorschläge geschätzt werden.
Ich bin ein wenig verwirrt über Ihr Problem. Könntest du das näher ausführen: Wenn ich versuche, xK, yK, dxK, dyK zurückzugeben, erhalte ich 316 Werte, die nur die Hälfte der Entfernung vom ursprünglichen, x, y 316 Gitter abdecken. –