2017-06-05 5 views
0

Ich benutze Python 2.7 mit scipy, um eine Abstandsmatrix für ein Array zu berechnen.python wie man den richtigen Abstandswert aus der scipy condensed distance matrix erhält

Ich bekomme nicht, wie die gewünschten Abstandswerte in der zurückgegebenen kondensierten Matrix gefunden werden.

Beispiel Siehe

from scipy.spatial.distance import pdist 
import numpy as np 

a = np.array([[1],[4],[0],[5]]) 
print a 
print pdist(a) 

[ 3. 1. 4. 4. 1. 5.] 

gedruckt wird, fand ich here, dass die ij Eintrag in der kondensierten Matrix den Abstand zwischen den i und j Einträge gespeichert werden sollte, wo ithread fragen, ob sie ij bedeuten als i * j oder str.join (i, j) zB 1,2 -> 2 oder 12.

Ich kann keinen konsistenten Weg finden, den gewünschten Index zu wissen.

siehe mein Beispiel, Sie sollten erwarten, dass alle Abstände von Eintrag 0 zu irgendwo anders in Eintrag 0 gespeichert werden, wenn die erste Option gültig ist.

kann jemand etwas Licht darauf werfen, wie kann ich meine gewünschte Entfernung von Eintrag x zu Eintrag y extrahieren? Welchen Index suche ich?

Danke!

Antwort

2

Dieser Vektor ist in kondensierter Form. Es zählt alle Paare von Indizes in einer natürlichen Reihenfolge (in Ihrem Beispiel 0,10,20,30,41,21,31,42,32,4) und ergibt den Abstand zwischen den Elementen bei diesen Feldeinträgen.

Es gibt auch die squareform-Funktion, die die kondensierte Form in eine quadratische Matrixform (und umgekehrt) umwandelt. Die quadratische Matrixform ist genau das, was Sie erwarten, d. H. Am Eingang ij (Zeile i, Spalte j) speichert sie den Abstand zwischen dem i-ten und j-ten Eintrag. Wenn Sie z. B. print squareform(d) am Ende des Codes hinzufügen, lautet die Ausgabe:

array([[ 0., 3., 1., 4.], 
     [ 3., 0., 4., 1.], 
     [ 1., 4., 0., 5.], 
     [ 4., 1., 5., 0.]]) 
Verwandte Themen