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
Если передана сжатая матрица расстояний, возвращается избыточная, или если передана избыточная, возвращается сжатая матрица расстояний.
Примечания
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не является квадратной или асимметричной, возникает ошибка.X = squareform(v)Дано
n * (n-1) / 2вектор размераvдля некоторого целого числаn >= 1кодируя расстояния, как описано,X = squareform(v)возвращает матрицу расстояний размером n-на-nX.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])