當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy distance.cdist用法及代碼示例


本文簡要介紹 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

返回一個 by 距離矩陣。對於每個 ,度量 dist(u=XA[i], v=XB[j]) 被計算並存儲在第 條目中。

拋出

ValueError

如果 XA 和 XB 的列數不同,則會引發異常。

注意

以下是常見的調用約定:

  1. Y = cdist(XA, XB, 'euclidean')

    使用歐幾裏德距離(2-範數)作為點之間的距離度量來計算 點之間的距離。這些點在矩陣 X 中排列為 維行向量。

  2. Y = cdist(XA, XB, 'minkowski', p=2.)

    使用 Minkowski 距離 ( -norm) 計算距離,其中 (請注意,如果 ,這隻是 quasi-metric )。

  3. Y = cdist(XA, XB, 'cityblock')

    計算點之間的城市街區或曼哈頓距離。

  4. Y = cdist(XA, XB, 'seuclidean', V=None)

    計算標準化歐幾裏得距離。兩個n-vectorsuv之間的標準化歐幾裏得距離是

    V是方差向量; V[i] 是對點的所有第 i 個分量計算的方差。如果未通過,則自動計算。

  5. Y = cdist(XA, XB, 'sqeuclidean')

    計算向量之間的平方歐幾裏得距離

  6. Y = cdist(XA, XB, 'cosine')

    計算向量 u 和 v 之間的餘弦距離,

    其中 是其參數 * 的 2 範數,而 的點積。

  7. Y = cdist(XA, XB, 'correlation')

    計算向量 u 和 v 之間的相關距離。這是

    其中 是向量 v 的元素的平均值,而 的點積。

  8. Y = cdist(XA, XB, 'hamming')

    計算歸一化的漢明距離,或兩個不同意的 n-vectors uv 之間的向量元素的比例。為了節省內存,矩陣X 可以是布爾類型。

  9. Y = cdist(XA, XB, 'jaccard')

    計算點之間的 Jaccard 距離。給定兩個向量 uv ,Jaccard 距離是那些不同意的元素的比例 u[i]v[i] 其中至少有一個是非零的。

  10. Y = cdist(XA, XB, 'jensenshannon')

    計算兩個概率數組之間的Jensen-Shannon 距離。給定兩個概率向量 ,Jensen-Shannon 距離為

    其中 的逐點均值, 是Kullback-Leibler 散度。

  11. Y = cdist(XA, XB, 'chebyshev')

    計算點之間的切比雪夫距離。兩個n-vectors、uv之間的切比雪夫距離是它們各自元素之間的最大範數1距離。更準確地說,距離由下式給出

  12. Y = cdist(XA, XB, 'canberra')

    計算點之間的堪培拉距離。 uv 兩點之間的堪培拉距離為

  13. Y = cdist(XA, XB, 'braycurtis')

    計算點之間的Bray-Curtis 距離。兩點uv之間的Bray-Curtis距離為

  14. Y = cdist(XA, XB, 'mahalanobis', VI=None)

    計算點之間的馬氏距離。 uv 兩點之間的馬氏距離為 ,其中 (VI 變量)是逆協方差。如果VI 不是None,則VI 將用作逆協方差矩陣。

  15. Y = cdist(XA, XB, 'yule')

    計算布爾向量之間的 Yule 距離。 (參見 yule 函數文檔)

  16. Y = cdist(XA, XB, 'matching')

    ‘hamming’ 的同義詞。

  17. Y = cdist(XA, XB, 'dice')

    計算布爾向量之間的骰子距離。 (參見 dice 函數文檔)

  18. Y = cdist(XA, XB, 'kulczynski1')

    計算布爾向量之間的 kulczynski 距離。 (參見 kulczynski1 函數文檔)

  19. Y = cdist(XA, XB, 'rogerstanimoto')

    計算布爾向量之間的Rogers-Tanimoto 距離。 (參見 rogerstanimoto 函數文檔)

  20. Y = cdist(XA, XB, 'russellrao')

    計算布爾向量之間的Russell-Rao 距離。 (參見 russellrao 函數文檔)

  21. Y = cdist(XA, XB, 'sokalmichener')

    計算布爾向量之間的Sokal-Michener 距離。 (參見 sokalmichener 函數文檔)

  22. Y = cdist(XA, XB, 'sokalsneath')

    計算向量之間的Sokal-Sneath 距離。 (參見 sokalsneath 函數文檔)

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

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.spatial.distance.cdist。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。