788 Stimmen

Wie kann der euklidische Abstand mit NumPy berechnet werden?

Ich habe zwei Punkte in 3D:

(xa, ya, za)
(xb, yb, zb)

Und ich möchte die Entfernung berechnen:

dist = sqrt((xa-xb)^2 + (ya-yb)^2 + (za-zb)^2)

Was ist der beste Weg, dies mit NumPy, oder mit Python im Allgemeinen zu tun? Ich habe:

import numpy
a = numpy.array((xa ,ya, za))
b = numpy.array((xb, yb, zb))

8voto

travelingbones Punkte 7045

Ich mag np.dot (Punktprodukt):

a = numpy.array((xa,ya,za))
b = numpy.array((xb,yb,zb))

distance = (np.dot(a-b,a-b))**.5

7voto

ePi272314 Punkte 11235

Seit Python 3.8

Seit Python 3.8 wird die math Modul enthält die Funktion math.dist() .
Siehe hier https://docs.python.org/3.8/library/math.html#math.dist .

math.dist(p1, p2)
Gibt den euklidischen Abstand zwischen zwei Punkten p1 und p2 zurück, die jeweils als eine Folge (oder Iterable) von Koordinaten angegeben sind.

import math
print( math.dist( (0,0),   (1,1)   )) # sqrt(2) -> 1.4142
print( math.dist( (0,0,0), (1,1,1) )) # sqrt(3) -> 1.7321

7voto

hakkikonu Punkte 5477

Mit Python 3.8 ist das sehr einfach.

https://docs.python.org/3/library/math.html#math.dist

math.dist(p, q)

Gibt den euklidischen Abstand zwischen zwei Punkten p und q zurück, die jeweils mit als eine Folge (oder Iterable) von Koordinaten. Die beiden Punkte müssen die gleiche Dimension haben.

Entspricht in etwa:

sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))

6voto

Alejandro Sazo Punkte 785

Mit a et b wie Sie sie definiert haben, können Sie auch verwenden:

distance = np.sqrt(np.sum((a-b)**2))

5voto

Andy Lee Punkte 91

Hier ist ein kurzer Code für den euklidischen Abstand in Python, wenn zwei Punkte als Listen in Python dargestellt werden.

def distance(v1,v2): 
    return sum([(x-y)**2 for (x,y) in zip(v1,v2)])**(0.5)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X