scipy.spatial.distance.

squareform#

scipy.spatial.distance.squareform(X, force='no', проверки=True)[источник]#

Преобразовать вектор расстояний в квадратную матрицу расстояний, и наоборот.

Параметры:
Xarray_like

Либо свёрнутая, либо избыточная матрица расстояний.

forcestr, optional

Как и в MATLAB(TM), если force равно 'tovector' или 'tomatrix', входные данные будут обрабатываться как матрица расстояний или вектор расстояний соответственно.

проверкиbool, необязательно

Если установлено значение False, проверки на симметричность матрицы и нулевые диагонали выполняться не будут. Это полезно, если известно, что X - X.T1 мал и diag(X) близко к нулю. Эти значения игнорируются в любом случае, поэтому они не нарушают преобразование squareform.

Возвращает:
Yndarray

Если передана сжатая матрица расстояний, возвращается избыточная, или если передана избыточная, возвращается сжатая матрица расстояний.

Примечания

  1. v = squareform(X)

    Для заданной квадратной симметричной матрицы расстояний размером n на n X, v = squareform(X) возвращает n * (n-1) / 2 (т.е. биномиальный коэффициент n choose 2) вектор размера v где \(v[{n \choose 2} - {n-i \choose 2} + (j-i-1)]\) — это расстояние между различными точками i и j. Если X не является квадратной или асимметричной, возникает ошибка.

  2. X = squareform(v)

    Дано n * (n-1) / 2 вектор размера v для некоторого целого числа n >= 1 кодируя расстояния, как описано, X = squareform(v) возвращает матрицу расстояний размером n-на-n X. X[i, j] и X[j, i] значения установлены в \(v[{n \choose 2} - {n-i \choose 2} + (j-i-1)]\) и все диагональные элементы равны нулю.

В SciPy 0.19.0, squareform прекратил приведение всех типов входных данных к float64 и начал возвращать массивы того же типа данных, что и входные.

Примеры

>>> import numpy as np
>>> from scipy.spatial.distance import pdist, squareform

x является массивом из пяти точек в трёхмерном пространстве.

>>> x = np.array([[2, 0, 2], [2, 2, 3], [-2, 4, 5], [0, 1, 9], [2, 2, 4]])

pdist(x) вычисляет евклидовы расстояния между каждой парой точек в x. Расстояния возвращаются в одномерном массиве длиной 5*(5 - 1)/2 = 10.

>>> 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) возвращает матрицу расстояний 5x5.

>>> 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.        ]])

При задании квадратной матрицы расстояний m, squareform(m) возвращает одномерный сжатый вектор расстояний, связанный с матрицей. В этом случае мы восстанавливаем distvec.

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