1 回答

TA贡献1757条经验 获得超8个赞
从numpy.covdocs,第一个参数应该是一个数组,m这样:
m 的每一行代表一个变量,每一列代表所有这些变量的一个观察值。
因此,要修复您的代码,只需.T在调用之前对数组进行转置(with )cov:
V = np.cov(np.array([array_1, array_2]).T)
IV = np.linalg.inv(V)
print(mahalanobis(array_1, array_2, IV))
我刚刚在一些随机数据上测试了这一点,我可以确认它有效。
此外,仅从两个观测值计算协方差是一个坏主意,而且不太可能非常准确。如果您的数据来自图像,则img在计算协方差矩阵时应使用整个图像(或至少整个感兴趣区域),然后使用该矩阵来查找两个感兴趣向量之间的马氏距离:
V = np.cov(np.array(img))
IV = np.linalg.inv(V)
print(mahalanobis(array_1, array_2, IV))
您可能需要也可能不需要替换img为img.T,这取决于您的生成方式array_1和array_2首先。
如果您得到奇异协方差矩阵,那么您将遇到数学问题,而不是代码问题。问题“为什么我的协方差矩阵是奇异的?”这显然是一个足够普遍的问题。已经被问到并回答了。从广义上讲,在某种意义上,当您的足够多的数据点“太相似”时,似乎就会发生这种情况。我想只使用两个数据点也会使这更有可能。
添加回答
举报