无法计算马哈拉诺比斯距离

时间:2015-10-25 19:01:55

标签: python numpy scipy

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(暗淡0)!= 2(暗淡0)

2 个答案:

答案 0 :(得分:0)

Mahalanobis distance计算两个 D 维度向量之间的距离,参考 D x D 协方差矩阵,在某些意义上,#em;定义空间"其中计算距离。矩阵编码在计算距离时应如何加权各种坐标组合。

您似乎已经为您的点计算了2x2样本协方差,这不是在马哈拉诺比斯距离中使用的协方差矩阵的正确类型。

如果您已经已经有一个合理的50x50协方差矩阵来定义您的马哈拉诺比斯指标,那么马哈拉诺比斯距离可能不适合您的应用。没有更多细节,很难给出更好的推荐。

答案 1 :(得分:0)

正如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