squareform#
- scipy.spatial.distance.squareform(X, force='no', checks=True)[Quelle]#
Konvertiert einen Distanzvektor in Vektorform in eine Distanzmatrix in Quadratform und umgekehrt.
- Parameter:
- Xarray_like
Entweder eine kondensierte oder eine redundante Distanzmatrix.
- forcestr, optional
Wie bei MATLAB(TM), wenn force gleich
'tovector'oder'tomatrix'ist, wird die Eingabe als Distanzmatrix bzw. Distanzvektor behandelt.- checksbool, optional
Wenn auf False gesetzt, werden keine Prüfungen auf Matrixsymmetrie oder Nulldiagonalen durchgeführt. Dies ist nützlich, wenn bekannt ist, dass
X - X.T1klein ist unddiag(X)nahe Null liegt. Diese Werte werden ohnehin ignoriert, sodass sie die squareform-Transformation nicht stören.
- Rückgabe:
- Yndarray
Wenn eine kondensierte Distanzmatrix übergeben wird, wird eine redundante zurückgegeben, oder wenn eine redundante übergeben wird, wird eine kondensierte Distanzmatrix zurückgegeben.
Hinweise
v = squareform(X)Gegeben eine quadratische n-mal-n symmetrische Distanzmatrix
X, gibtv = squareform(X)einen Vektor der Größen * (n-1) / 2(d.h. Binomialkoeffizient n über 2) v zurück, wobei \(v[{n \choose 2} - {n-i \choose 2} + (j-i-1)]\) der Abstand zwischen den verschiedenen Punkteniundjist. WennXnicht quadratisch oder asymmetrisch ist, wird ein Fehler ausgelöst.X = squareform(v)Gegeben ein Vektor
vder Größen * (n-1) / 2für eine ganze Zahln >= 1, der Abstände wie beschrieben kodiert, gibtX = squareform(v)eine n-mal-n DistanzmatrixXzurück. Die WerteX[i, j]undX[j, i]werden auf \(v[{n \choose 2} - {n-i \choose 2} + (j-i-1)]\) gesetzt und alle Diagonalelemente sind Null.
In SciPy 0.19.0 hörte
squareformauf, alle Eingabetypen in float64 zu konvertieren, und begann, Arrays mit demselben dtype wie die Eingabe zurückzugeben.Beispiele
>>> import numpy as np >>> from scipy.spatial.distance import pdist, squareform
xist ein Array von fünf Punkten im dreidimensionalen Raum.>>> x = np.array([[2, 0, 2], [2, 2, 3], [-2, 4, 5], [0, 1, 9], [2, 2, 4]])
pdist(x)berechnet die euklidischen Abstände zwischen jedem Punktpaar inx. Die Abstände werden in einem eindimensionalen Array mit der Länge5*(5 - 1)/2 = 10zurückgegeben.>>> distvec = pdist(x) >>> distvec array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949, 6.40312424, 1. , 5.38516481, 4.58257569, 5.47722558])
squareform(distvec)gibt die 5x5-Distanzmatrix zurück.>>> m = squareform(distvec) >>> m array([[0. , 2.23606798, 6.40312424, 7.34846923, 2.82842712], [2.23606798, 0. , 4.89897949, 6.40312424, 1. ], [6.40312424, 4.89897949, 0. , 5.38516481, 4.58257569], [7.34846923, 6.40312424, 5.38516481, 0. , 5.47722558], [2.82842712, 1. , 4.58257569, 5.47722558, 0. ]])
Wenn eine quadratische Distanzmatrix
mübergeben wird, gibtsquareform(m)den eindimensionalen kondensierten Distanzvektor zurück, der mit der Matrix assoziiert ist. In diesem Fall erhalten wirdistveczurück.>>> squareform(m) array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949, 6.40312424, 1. , 5.38516481, 4.58257569, 5.47722558])