Ich habe zwei Arrays, das erste np.array ist die Punkte aus, und die zweite np.array sind alle Entfernungen, die ich berechnen muss.Berechnen Sie die Entfernung zwischen numpy Arrays
Beispiel:
import numpy as np
from_array = np.array([(0,1), (1,1), ..., (x,y)])
to_array = np.array([(5,1), (3,1), ..., (x,y)])
Was ich tun muss, ist der erste Eintrag des from_array
zu nehmen und berechnen alle Abstände zwischen from_array[0]
zu allen Punkten in to_array, halten dann die maximale Distanz.
So kann ich für diese Brute:
def get_distances(from_array, to_array):
results = []
distances = []
for pt in from_array:
for to in to_array:
results.append(calc_dist(pt, to))
distances.append(results)
return distances
Aber das ist langsam, ich für eine optimierte Art und Weise suchen die Berechnung zu tun, da ich tausende von Punkten haben könnte.
Das Endziel ist die Berechnung der Hausdorff-Distanz.
fhd = np.mean(np.min(SomeDistanceArray,axis=0))
rhd = np.mean(np.min(SomeDistanceArray,axis=1))
print (max(fhd, rhd))
Ich möchte für diese Aufgabe verwenden numpy nur. Meine Entfernung kann entweder euklidisch oder quadratisch euklidisch sein.
Also suche ich Hilfe für eine optimierte Methode zur Berechnung der euklidischen Distanzmethoden für zwei np.arrays. Es sollte beachtet werden, dass Array 1 mehr Zeilen als Array 2 haben kann. Bedeutet, dass die Länge des 2D-Arrays (x, y) 10 Zeilen mit 30 Zeilen vergleichen könnte.
Schauen Sie in Scipys Cdist. – Divakar
Ich habe das Gefühl, dass ich gerade dies beantwortet habe [gestern] (http://stackoverflow.com/questions/40969013/theano-row-column-wise-subtraction/40969905#40969905) –
Scipy Version 0.19.0 (Entwicklungsversion von Jan2017) hat eine Implementierung von ['Directed Hausdorff distance'] (https://scipy.github.io/devdocs/generated/scipy.spatial.distance.directed_hausdorff.html#scipy-spatial-distance-directed-hausdorff), die Sie wollen prüfen. Es verwendet einen effizienten Algorithmus (siehe [Papier] (https://dx.doi.org/10.1109/TPAMI.2015.2408351)) mit einer Nähe zu O (m) Laufzeit (anstatt O (m * n)). – weiji14