Effiziente und genaue Berechnung der euklidischen Distanz

Folgenden einige online-Forschung (Eins, Zwei, numpy, scipy, scikit, Mathematik), ich habe Wege gefunden, das für die Berechnung der euklidische Distanz in Python:

# 1
numpy.linalg.norm(a-b)

# 2
distance.euclidean(vector1, vector2)

# 3
sklearn.metrics.pairwise.euclidean_distances  

# 4
sqrt((xa-xb)^2 + (ya-yb)^2 + (za-zb)^2)

# 5
dist = [(a - b)**2 for a, b in zip(vector1, vector2)]
dist = math.sqrt(sum(dist))

# 6
math.hypot(x, y)

Ich Frage mich, wenn jemand könnte einen Einblick, auf welche der oben genannten (oder jede andere, die ich noch nicht gefunden) gilt als das beste in Bezug auf Effizienz und Präzision. Wenn jemand Kenntnis über Ressource(N), der diskutiert, das Thema, das wäre auch toll.

Den Kontext ich bin interessant ist bei der Berechnung der euklidischen Distanz zwischen Paaren von Anzahl-Tupel, z.B. der Abstand zwischen (52, 106, 35, 12) und (33, 153, 75, 10).

  • Vergessen Sie nicht, den integrierten math.hypot(). Können Sie leicht testen Sie die Geschwindigkeit mit der timeit - Modul.
  • Toller Vorschlag, hatte keine Ahnung, dass so eine integrierte Methode existiert! (bearbeitet meine Frage, es aufzunehmen)
  • Mögliche Einschränkung mit math.hypot() ist, dass es macht nur 2D-Vektoren, in der Erwägung, dass viele der anderen, die Sie erwähnen, behandeln können Vektoren von 3 oder mehr Dimensionen. Auf der anderen Seite, wenn alles, was Sie tun, ist 2D, die nicht-generalisierte gebaut-vielleicht haben Sie einen speed-Vorteil.
  • Interessant VORBEHALT, obwohl es für meinen Fall kann es ideal sein. Möglicherweise naive Frage: bei der Berechnung der euklidischen Distanz zwischen (52, 106, 35, 12) und (33, 153, 75, 10) sind die zwei 4D-Vektoren??
  • Alles hängt davon ab, wie man Sie zu interpretieren in das Programm. Konnte zwei 4D-Vektoren oder vier 2D-Vektoren...der ehemalige scheint wahrscheinlich — ich kann nicht sagen, aus deinem Beispiel-code.
  • Nun, alles, was mich interessiert ist der Vergleich der euklidischen Distanz der x1 mit y1, x2 mit y2 etc., wo (x1, x2, x3, x4) und (y1, y2, y3, y4). Und ich kann mehr als 4 Werte auf den Tupeln. Könnten Sie mir bitte helfen zu verstehen, was Art von dimension, Vektoren, die ich brauche?
  • Gute news, das was du beschrieben hast sind drei 2D-Vektoren zwischen den 4 Punkten, die math.hypot() und Griff in Ordnung.
  • Nicht du meinst zwei 2D-Vektoren zwischen den 4 Punkten?
  • Nein, ich meinte den drei 2D-Vektoren definiert, die von den Paaren von Endpunkten zwischen (52,33) und (106,153), (106,153) und (35,75), plus (35,75) und (12,10). Vielleicht sollten Sie Bearbeiten Ihre Frage und zeigen die gewünschten Ergebnisse.

InformationsquelleAutor | 2016-06-13
Schreibe einen Kommentar