簡體   English   中英

無法計算馬哈拉諾比斯距離

[英]Unable to calculate mahalanobis distance

import numpy as np
from scipy.spatial import distance

d1 = np.random.randint(0, 255, size=(50))*0.9
d2 = np.random.randint(0, 255, size=(50))*0.7

vi = np.linalg.inv(np.cov(d1,d2, rowvar=0))   
res = distance.mahalanobis(d1,d2,vi)

print res

ValueError:形狀(50,)和(2,2)不對齊:50(dim 0)!= 2(dim 0)

馬氏距離參考D x D協方差矩陣來計算兩個D維向量之間的距離,從某種意義上說,該矩陣“定義了計算距離的空間”。 矩陣編碼在計算距離時應如何加權各種坐標組合。

看來您已經為您的點計算了2x2樣本協方差,這不是在馬哈拉諾比斯距離中使用的正確類型的協方差矩陣。

如果你不已經有一個良好的理由的50x50協方差矩陣定義你的馬氏指標,馬氏距離可能是不適合你的應用程序的正確選擇。 沒有更多細節,很難給出更好的建議。

jakevdp的答案所述,協方差逆矩陣必須為DxD維,其中D為向量中元素的數量。 因此,您的代碼應為:

import numpy as np
from scipy.spatial import distance

d1 = np.random.randint(0, 255, size=(50))*0.9
d2 = np.random.randint(0, 255, size=(50))*0.7
m =zip(d1, d2)
v = np.cov(m)
try:
    vi = np.linalg.inv(v)
except:
    vi = np.linalg.pinv(v) #just in case the produced matrix cannot be inverted

res = distance.mahalanobis(d1,d2,vi)

print res

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM