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


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


本文簡要介紹 python 語言中 scipy.spatial.distance.pdist 的用法。

用法:

scipy.spatial.distance.pdist(X, metric='euclidean', *, out=None, **kwargs)#

n 維空間中觀測值之間的成對距離。

有關常見調用約定,請參閱注釋。

參數

X array_like

在 n 維空間中由 m 個原始觀測值組成的 m × n 數組。

metric str 或函數,可選

要使用的距離度量。距離函數可以是‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘jensenshannon’、‘kulczynski1’, ‘mahalanobis’、‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’。

out ndarray

輸出數組。如果不是 None,則壓縮距離矩陣 Y 存儲在該數組中。

**kwargs 字典,可選

指標的額外參數:請參閱每個指標文檔以獲取所有可能參數的列表。

一些可能的論點:

p:標量 p-norm 申請 Minkowski,加權和未加權。默認值:2。

w: ndarray 支持權重的指標的權重向量(例如 Minkowski)。

V:ndarray 標準化歐幾裏得的方差向量。默認值:var(X, axis=0, ddof=1)

VI:ndarray Mahalanobis 的協方差矩陣的逆矩陣。默認值:inv(cov(X.T)).T

返回

Y ndarray

返回壓縮距離矩陣 Y。對於每個 (其中 ),其中 m 是原始觀測值的數量。度量 dist(u=X[i], v=X[j]) 被計算並存儲在條目 m * i + j - ((i + 2) * (i + 1)) // 2 中。

注意

有關如何計算此條目的索引或將壓縮距離矩陣轉換為冗餘方陣的信息,請參閱squareform

以下是常見的調用約定。

  1. Y = pdist(X, 'euclidean')

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

  2. Y = pdist(X, 'minkowski', p=2.)

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

  3. Y = pdist(X, 'cityblock')

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

  4. Y = pdist(X, 'seuclidean', V=None)

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

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

  5. Y = pdist(X, 'sqeuclidean')

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

  6. Y = pdist(X, 'cosine')

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

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

  7. Y = pdist(X, 'correlation')

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

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

  8. Y = pdist(X, 'hamming')

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

  9. Y = pdist(X, 'jaccard')

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

  10. Y = pdist(X, 'jensenshannon')

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

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

  11. Y = pdist(X, 'chebyshev')

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

  12. Y = pdist(X, 'canberra')

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

  13. Y = pdist(X, 'braycurtis')

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

  14. Y = pdist(X, 'mahalanobis', VI=None)

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

  15. Y = pdist(X, 'yule')

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

  16. Y = pdist(X, 'matching')

    ‘hamming’ 的同義詞。

  17. Y = pdist(X, 'dice')

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

  18. Y = pdist(X, 'kulczynski1')

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

  19. Y = pdist(X, 'rogerstanimoto')

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

  20. Y = pdist(X, 'russellrao')

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

  21. Y = pdist(X, 'sokalmichener')

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

  22. Y = pdist(X, 'sokalsneath')

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

  23. Y = pdist(X, 'kulczynski1')

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

  24. Y = pdist(X, f)

    使用用戶提供的 2 元函數 f 計算 X 中所有向量對之間的距離。例如,向量之間的歐幾裏得距離可以計算如下:

    dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))

    請注意,您應該避免傳遞對此庫中定義的距離函數之一的引用。例如,:

    dm = pdist(X, sokalsneath)

    將使用 Python 函數 sokalsneath 計算 X 中向量之間的成對距離。這將導致 sokalsneath 被調用 次,這是低效的。相反,優化的 C 版本更加高效,我們使用以下語法來調用它:

    dm = pdist(X, 'sokalsneath')

例子

>>> import numpy as np
>>> from scipy.spatial.distance import pdist

x 是三維空間中五個點的數組。

>>> x = np.array([[2, 0, 2], [2, 2, 3], [-2, 4, 5], [0, 1, 9], [2, 2, 4]])

pdist(x) 不帶附加參數計算 10 個成對歐幾裏德距離:

>>> pdist(x)
array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949,
       6.40312424, 1.        , 5.38516481, 4.58257569, 5.47722558])

以下使用 p = 3.5 計算成對 Minkowski 距離:

>>> pdist(x, metric='minkowski', p=3.5)
array([2.04898923, 5.1154929 , 7.02700737, 2.43802731, 4.19042714,
       6.03956994, 1.        , 4.45128103, 4.10636143, 5.0619695 ])

成對的城市街區或曼哈頓距離:

>>> pdist(x, metric='cityblock')
array([ 3., 11., 10.,  4.,  8.,  9.,  1.,  9.,  7.,  8.])

相關用法


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