scipy.spatial.distance.

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.T1 klein ist und diag(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

  1. v = squareform(X)

    Gegeben eine quadratische n-mal-n symmetrische Distanzmatrix X, gibt v = squareform(X) einen Vektor der Größe n * (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 Punkten i und j ist. Wenn X nicht quadratisch oder asymmetrisch ist, wird ein Fehler ausgelöst.

  2. X = squareform(v)

    Gegeben ein Vektor v der Größe n * (n-1) / 2 für eine ganze Zahl n >= 1, der Abstände wie beschrieben kodiert, gibt X = squareform(v) eine n-mal-n Distanzmatrix X zurück. Die Werte X[i, j] und X[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 squareform auf, 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

x ist 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 in x. Die Abstände werden in einem eindimensionalen Array mit der Länge 5*(5 - 1)/2 = 10 zurü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, gibt squareform(m) den eindimensionalen kondensierten Distanzvektor zurück, der mit der Matrix assoziiert ist. In diesem Fall erhalten wir distvec zurück.

>>> squareform(m)
array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949,
       6.40312424, 1.        , 5.38516481, 4.58257569, 5.47722558])