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 resValueError:形状( 50,)和(2,2)未对齐:50(尺寸0) != 2(尺寸0)
发布于 2015-10-27 21:47:14
Mahalanobis distance参考D x D协方差矩阵计算两个D维向量之间的距离,在某种意义上,该矩阵“定义了计算距离的空间”。该矩阵编码了在计算距离时应如何对各种坐标组合进行加权。
您似乎已经计算了点的2x2样本协方差,这不是用于马氏距离的正确协方差矩阵类型。
如果您还没有一个合理的50x50协方差矩阵来定义mahalanobis度量,那么mahalanobis距离可能不是您的应用程序的正确选择。如果没有更多的细节,很难给出更好的推荐。
发布于 2019-05-23 20:51:26
正如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 reshttps://stackoverflow.com/questions/33333743
复制相似问题