Python 无法计算马氏距离

Python 无法计算马氏距离,python,numpy,scipy,Python,Numpy,Scipy,ValueError:形状(50,)和(2,2)未对齐:50(尺寸0)!=2(dim 0)参考D x D协方差矩阵计算两个D维向量之间的距离,在某些意义上,协方差矩阵“定义了计算距离的空间”。矩阵对计算距离时应如何加权各种坐标组合进行编码 似乎您已经计算了点的2x2样本协方差,这不是在马氏距离中使用的正确类型的协方差矩阵 如果您还没有定义马氏度量的合理的50x50协方差矩阵,那么马氏距离可能不是您应用程序的正确选择。如果没有更多细节,就很难给出更好的建议。如的回答中所述,逆协方差矩阵必须是DxD

ValueError:形状(50,)和(2,2)未对齐:50(尺寸0)!=2(dim 0)

参考D x D协方差矩阵计算两个D维向量之间的距离,在某些意义上,协方差矩阵“定义了计算距离的空间”。矩阵对计算距离时应如何加权各种坐标组合进行编码

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

如果您还没有定义马氏度量的合理的50x50协方差矩阵,那么马氏距离可能不是您应用程序的正确选择。如果没有更多细节,就很难给出更好的建议。

如的回答中所述,逆协方差矩阵必须是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

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

print res

输出数组的形状是什么,即
res
的形状?另外,你能手工计算出非常小的预期输出吗,比如说对于
d1
d2
作为
3
元素,每种情况下?@Divakar
res
是一个数字如果我没有弄错,
vi
应该是对所有观测值的精度矩阵的估计
np.cov(d1,d2)
可能不是你想要的。@cel-doc说它是协方差矩阵的倒数。你可能想查看维基百科,了解这个距离到底测量了什么。
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