如何在 Python 中找到两个一维数组之间的马氏距离?

我有两个一维数组,我需要找出它们之间的马氏距离。


发现Scipy已经实现了这个功能。但是,我对 IV 的值应该是什么感到困惑。我尝试执行以下操作


V = np.cov(np.array([array_1, array_2]))

IV = np.linalg.inv(V)

print(mahalanobis(array_1, array_2, IV))

但是,我收到以下错误:


文件“C:\Users\XXXXXX\AppData\Local\Continuum\anaconda3\envs\face\lib\site-packages\scipy\spatial\distance.py”,第 1043 行,在 mahalanobis m = np.dot(np.dot (三角洲,VI),三角洲)


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


婷婷同学_
浏览 499回答 1
1回答

陪伴而非守候

从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首先。如果您得到奇异协方差矩阵,那么您将遇到数学问题,而不是代码问题。问题“为什么我的协方差矩阵是奇异的?”这显然是一个足够普遍的问题。已经被问到并回答了。从广义上讲,在某种意义上,当您的足够多的数据点“太相似”时,似乎就会发生这种情况。我想只使用两个数据点也会使这更有可能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python