本文簡要介紹 python 語言中 scipy.spatial.distance.cdist
的用法。
用法:
scipy.spatial.distance.cdist(XA, XB, metric='euclidean', *, out=None, **kwargs)#
計算兩個輸入集合中每對之間的距離。
有關常見調用約定,請參閱注釋。
- XA: array_like
by 數組 在 維空間中的原始觀測值。輸入轉換為浮點類型。
- XB: array_like
by 數組 在 維空間中的原始觀測值。輸入轉換為浮點類型。
- metric: str 或可調用,可選
要使用的距離度量。如果是字符串,距離函數可以是‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘jensenshannon’、‘kulczynski1’, ‘mahalanobis’、‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’。
- **kwargs: 字典,可選
指標的額外參數:請參閱每個指標文檔以獲取所有可能參數的列表。
一些可能的論點:
p:標量 p-norm 申請 Minkowski,加權和未加權。默認值:2。
w: 數組 支持權重的指標的權重向量(例如 Minkowski)。
V: 數組 標準化歐幾裏得的方差向量。默認值:var(vstack([XA, XB]), axis=0, ddof=1)
VI:數組 Mahalanobis 的協方差矩陣的逆矩陣。默認值:inv(cov(vstack([XA, XB].T))).T
out: ndarray 輸出數組如果不是None,距離矩陣Y存儲在這個數組中。
- Y: ndarray
返回一個
dist(u=XA[i], v=XB[j])
被計算並存儲在第 條目中。 by 距離矩陣。對於每個 和 ,度量
- ValueError
如果 XA 和 XB 的列數不同,則會引發異常。
參數 ::
返回 ::
拋出 ::
注意:
以下是常見的調用約定:
Y = cdist(XA, XB, 'euclidean')
使用歐幾裏德距離(2-範數)作為點之間的距離度量來計算 點之間的距離。這些點在矩陣 X 中排列為 維行向量。
Y = cdist(XA, XB, 'minkowski', p=2.)
使用 Minkowski 距離 ( -norm) 計算距離,其中 (請注意,如果 ,這隻是 quasi-metric )。
Y = cdist(XA, XB, 'cityblock')
計算點之間的城市街區或曼哈頓距離。
Y = cdist(XA, XB, 'seuclidean', V=None)
計算標準化歐幾裏得距離。兩個n-vectors
u
和v
之間的標準化歐幾裏得距離是V是方差向量; V[i] 是對點的所有第 i 個分量計算的方差。如果未通過,則自動計算。
Y = cdist(XA, XB, 'sqeuclidean')
計算向量之間的平方歐幾裏得距離 。
Y = cdist(XA, XB, 'cosine')
計算向量 u 和 v 之間的餘弦距離,
其中
*
的 2 範數,而 是 和 的點積。 是其參數Y = cdist(XA, XB, 'correlation')
計算向量 u 和 v 之間的相關距離。這是
其中 是向量 v 的元素的平均值,而 是 和 的點積。
Y = cdist(XA, XB, 'hamming')
計算歸一化的漢明距離,或兩個不同意的 n-vectors
u
和v
之間的向量元素的比例。為了節省內存,矩陣X
可以是布爾類型。Y = cdist(XA, XB, 'jaccard')
計算點之間的 Jaccard 距離。給定兩個向量
u
和v
,Jaccard 距離是那些不同意的元素的比例u[i]
和v[i]
其中至少有一個是非零的。Y = cdist(XA, XB, 'jensenshannon')
計算兩個概率數組之間的Jensen-Shannon 距離。給定兩個概率向量 和 ,Jensen-Shannon 距離為
其中 是 和 的逐點均值, 是Kullback-Leibler 散度。
Y = cdist(XA, XB, 'chebyshev')
計算點之間的切比雪夫距離。兩個n-vectors、
u
和v
之間的切比雪夫距離是它們各自元素之間的最大範數1距離。更準確地說,距離由下式給出Y = cdist(XA, XB, 'canberra')
計算點之間的堪培拉距離。
u
和v
兩點之間的堪培拉距離為Y = cdist(XA, XB, 'braycurtis')
計算點之間的Bray-Curtis 距離。兩點
u
和v
之間的Bray-Curtis距離為Y = cdist(XA, XB, 'mahalanobis', VI=None)
計算點之間的馬氏距離。
u
和v
兩點之間的馬氏距離為 ,其中 (VI
變量)是逆協方差。如果VI
不是None,則VI
將用作逆協方差矩陣。Y = cdist(XA, XB, 'yule')
計算布爾向量之間的 Yule 距離。 (參見
yule
函數文檔)Y = cdist(XA, XB, 'matching')
‘hamming’ 的同義詞。
Y = cdist(XA, XB, 'dice')
計算布爾向量之間的骰子距離。 (參見
dice
函數文檔)Y = cdist(XA, XB, 'kulczynski1')
計算布爾向量之間的 kulczynski 距離。 (參見
kulczynski1
函數文檔)Y = cdist(XA, XB, 'rogerstanimoto')
計算布爾向量之間的Rogers-Tanimoto 距離。 (參見
rogerstanimoto
函數文檔)Y = cdist(XA, XB, 'russellrao')
計算布爾向量之間的Russell-Rao 距離。 (參見
russellrao
函數文檔)Y = cdist(XA, XB, 'sokalmichener')
計算布爾向量之間的Sokal-Michener 距離。 (參見
sokalmichener
函數文檔)Y = cdist(XA, XB, 'sokalsneath')
計算向量之間的Sokal-Sneath 距離。 (參見
sokalsneath
函數文檔)Y = cdist(XA, XB, f)
使用用戶提供的 2 元函數 f 計算 X 中所有向量對之間的距離。例如,向量之間的歐幾裏得距離可以計算如下:
dm = cdist(XA, XB, lambda u, v: np.sqrt(((u-v)**2).sum()))
請注意,您應該避免傳遞對此庫中定義的距離函數之一的引用。例如,:
dm = cdist(XA, XB, sokalsneath)
將使用 Python 函數
sokalsneath
計算 X 中向量之間的成對距離。這將導致 sokalsneath 被調用 次,這是低效的。相反,優化的 C 版本更加高效,我們使用以下語法來調用它:dm = cdist(XA, XB, 'sokalsneath')
例子:
求四個二維坐標之間的歐幾裏得距離:
>>> from scipy.spatial import distance >>> import numpy as np >>> coords = [(35.0456, -85.2672), ... (35.1174, -89.9711), ... (35.9728, -83.9422), ... (36.1667, -86.7833)] >>> distance.cdist(coords, coords, 'euclidean') array([[ 0. , 4.7044, 1.6172, 1.8856], [ 4.7044, 0. , 6.0893, 3.3561], [ 1.6172, 6.0893, 0. , 2.8477], [ 1.8856, 3.3561, 2.8477, 0. ]])
求從 3-D 點到單位立方體角的曼哈頓距離:
>>> a = np.array([[0, 0, 0], ... [0, 0, 1], ... [0, 1, 0], ... [0, 1, 1], ... [1, 0, 0], ... [1, 0, 1], ... [1, 1, 0], ... [1, 1, 1]]) >>> b = np.array([[ 0.1, 0.2, 0.4]]) >>> distance.cdist(a, b, 'cityblock') array([[ 0.7], [ 0.9], [ 1.3], [ 1.5], [ 1.5], [ 1.7], [ 2.1], [ 2.3]])
相關用法
- Python SciPy distance.cityblock用法及代碼示例
- Python SciPy distance.canberra用法及代碼示例
- Python SciPy distance.chebyshev用法及代碼示例
- Python SciPy distance.cosine用法及代碼示例
- Python SciPy distance.sokalmichener用法及代碼示例
- Python SciPy distance.dice用法及代碼示例
- Python SciPy distance.braycurtis用法及代碼示例
- Python SciPy distance.jensenshannon用法及代碼示例
- Python SciPy distance.sokalsneath用法及代碼示例
- Python SciPy distance.kulczynski1用法及代碼示例
- Python SciPy distance.jaccard用法及代碼示例
- Python SciPy distance.minkowski用法及代碼示例
- Python SciPy distance.pdist用法及代碼示例
- Python SciPy distance.rogerstanimoto用法及代碼示例
- Python SciPy distance.is_valid_y用法及代碼示例
- Python SciPy distance.russellrao用法及代碼示例
- Python SciPy distance.mahalanobis用法及代碼示例
- Python SciPy distance.is_valid_dm用法及代碼示例
- Python SciPy distance.sqeuclidean用法及代碼示例
- Python SciPy distance.seuclidean用法及代碼示例
- Python SciPy distance.directed_hausdorff用法及代碼示例
- Python SciPy distance.kulsinski用法及代碼示例
- Python SciPy distance.yule用法及代碼示例
- Python SciPy distance.squareform用法及代碼示例
- Python SciPy distance.hamming用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.spatial.distance.cdist。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。