1. 程式人生 > >python求各種距離公式

python求各種距離公式

今天一個偶然的機會體會到了python資料運算的強大。求一個數組各樣本之間的距離僅簡單的幾句程式碼就行。看來真的技術改變世界啊。廢話不多說,記下來怕以後忘記。
from scipy.spatial.distance import pdist, squareform
下面結合API文件標註一下具體用法:
1.X = pdist(X, 'euclidean')
計算陣列X樣本之間的歐式距離 返回值為 Y 為壓縮距離元組或矩陣(以下等同)
2. X = pdist(X, 'minkowski', p)
計算陣列樣本之間的明氏距離
3. Y = pdist(X, 'cityblock')
計算陣列樣本之間的曼哈頓距離
4. X = pdist(X, 'seuclidean', V=None)
計算陣列樣本之間的標準化歐式距離 ,v是方差向量,表示 v[i]表示第i個分量的方差,如果缺失。預設自動計算。
5. X = pdist(X, 'sqeuclidean')
計算陣列樣本之間歐式距離的平方
6. X = pdist(X, 'cosine')
計算陣列樣本之間餘弦距離 公式為:
7. X = pdist(X, 'correlation')
計算陣列樣本之間的相關距離。
8.X = pdist(X, 'hamming')
計算資料樣本之間的漢明距離
9. X = pdist(X, 'jaccard')
計算資料樣本之間的傑卡德距離
10. X = pdist(X, 'chebyshev')
計算陣列樣本之間的切比雪夫距離
11. X = pdist(X, 'canberra')
計算陣列樣本之間的堪培拉距離
12. X = pdist(X, 'mahalanobis', VI=None)
計算資料樣本之間的馬氏距離
還有好多不常用的距離就不一一寫出了,如果想查閱可以點點我,點我
除了對指定的距離計算該函式還可以穿lmbda表示式進行計算,如下
dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))
二、得到壓縮矩陣後還需下一步即:
Y=scipy.spatial.distance.squareform(X, force='no', checks=True)
其中,X就是上文提到的壓縮矩陣Y,force 如同MATLAB一樣,如果force等於‘tovector’ or ‘tomatrix’,輸入就會被當做距離矩陣或距離向量。
cheak當X-X.T比較小或diag(X)接近於零,是是有必要設成True的,返回值Y為一個距離矩陣Y[i,j]表示樣本i與樣本j的距離。