squareform#
- scipy.spatial.distance.squareform(X, force='no', checks=True)[原始碼]#
將向量形式的距離向量轉換為方陣形式的距離矩陣,反之亦然。
- 參數:
- Xarray_like
可以是精簡或冗餘的距離矩陣。
- forcestr, optional
與 MATLAB(TM) 相同,如果 force 等於
'tovector'
或'tomatrix'
,則輸入將分別被視為距離矩陣或距離向量。- checksbool, optional
如果設定為 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×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])