2016-04-18 22 views
0

Ich habe zwei Vektoren, sagen wir x=[2,4,6,7] und y=[2,6,7,8] und ich möchte die euklidische Entfernung oder jede andere implementierte Entfernung (von scipy zum Beispiel) zwischen jedem entsprechenden Paar finden. Das wird dist=[0, 2, 1, 1] sein.Finden Sie den Abstand jedes Paares zwischen zwei Vektoren

Wenn ich versuche,

dist = scipy.spatial.distance.cdist(x,y, metric='sqeuclidean') 

oder

dist = [scipy.spatial.distance.cdist(x,y, metric='sqeuclidean') for x,y in zip(x,y)] 

I

ValueError: XA must be a 2-dimensional array. 

bekommen, wie ich dist berechnen ich soll und warum habe ich zu diesem Zweck Daten neu zu gestalten?

+2

Seien Sie vorsichtig mit den Variablennamen, die Sie innerhalb der List Comprehensions verwenden ('für x, y'). Nach dem Verständnis bleiben sie sichtbar. In Ihrem Beispiel sind diese Variablen die gleichen wie die 'x' und' y' Vektoren, die Sie 'zip'ping sind. Nach dem Verständnis sind' x' und 'y' gleich den letzten Werten jedes Vektors , nicht die Vektoren selbst. – elpres

Antwort

0

Cdist berechnet nicht die Liste der Abstände zwischen entsprechenden Paaren, sondern die Matrix der Abstände zwischen allen Paaren.

np.linalg.norm((np.asarray(x)-np.asarray(y))[:, None], axis=1) 

ist, wie id Regel diese zwischen n-dimensionalen Punkte für den euklidischen Abstand schreiben; aber wenn Sie nur mit 1-dimensionalen Punkten zu tun haben, wäre der absolute Unterschied, wie von elpres vorgeschlagen, einfacher.

+0

Sind 'x' und' y' hier aufgelistet, wie der Benutzer angegeben hat? Ich bin mir nicht sicher, dass das funktionieren würde. – AKS

+0

Sie haben Recht; es braucht ein asarray –

+0

Ich bin auf der Suche nach einem Weg, der mich jede implementierte Entfernungsmetrik von scipy zum Beispiel anwenden lassen wird. Tatsächlich brauche ich die Entfernung jedes Wertes eines 1d-Vektors von einem Skalar. – LetsPlayYahtzee

Verwandte Themen