squareform#
- scipy.spatial.distance.squareform(X, force='no', checks=True)[源代码][源代码]#
将向量形式的距离向量转换为方阵形式的距离矩阵,反之亦然。
- 参数:
- Xarray_like
一个压缩或冗余的距离矩阵。
- 强制str, 可选
与 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选2)的向量`v`,其中:math:`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×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,并开始返回与输入相同 dtype 的数组。示例
>>> 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])