首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法计算mahalanobis距离

无法计算mahalanobis距离
EN

Stack Overflow用户
提问于 2015-10-26 03:01:55
回答 2查看 1.2K关注 0票数 0
代码语言:javascript
复制
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)

EN

回答 2

Stack Overflow用户

发布于 2015-10-27 21:47:14

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2019-05-23 20:51:26

正如jakevdp的答案中提到的,逆协方差矩阵必须是DxD维,其中D是向量中元素的数量。因此,您的代码应该是:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33333743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档