Ich habe ein Datenfeld namens A, das ungefähr so aussieht:
array([[0.59, 1.23], [0.89, 1.67], [0.21,0.99]...])
und hat ungefähr 400 Sätze von [x, y] Punkten. Ich möchte den Abstand zwischen jedem Punktsatz in A zu jedem Punktsatz in B ermitteln. Dies ist ein anderes Array, das genauso aussieht wie A, aber nur halb so lang ist (also etwa 200 Sätze von [x, y] Punkten). . Wenn ich also den Abstand zwischen dem q-ten Paar von [x, y] -Werten in B gegen alle [x, y] -Werte in A ermitteln wollte, habe ich versucht, etwas entlang der Linien von zu tun
import scipy.spatial.distance
for q in range(0,len(B)):
y=scipy.spatial.distance.cdist(A,B[:q,:])
aber ich glaube nicht, dass dies funktioniert. Ich möchte nur eine Ausgabe, die den Abstand zwischen der q-ten Reihe von B und allen Punkten in A angibt.
Antworten:
1 für die Antwort № 1Zwei Lösungen:
Berechnen Sie die komplette Matrix direkt und greifen Sie auf die q-te Spalte für die Werte zwischen A und B [q] zu.
d = scipy.spatial.distance.cdist(A,B)
for q in range(len(B)):
y = d[:,q]
print y
Wenn die resultierende Matrix zu groß ist, um im Speicher gespeichert zu werden. Sie könnten das tun.
for q in range(len(B)):
y = scipy.spatial.distance.cdist(A,[B[q]])
print y