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)
答案 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