当前位置: 代码迷 >> python >> 无法计算马哈拉诺比斯距离
  详细解决方案

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

热度:79   发布时间:2023-06-16 14:05:12.0
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协方差矩阵定义你的马氏指标,马氏距离可能是不适合你的应用程序的正确选择。 没有更多细节,很难给出更好的建议。

如的答案所述,协方差逆矩阵必须为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
  相关解决方案