我需要测量两个n维向量之间的距离.看来Mahalanobis Distance是个不错的选择,所以我想尝试一下.
我的代码如下所示:
import numpy as np
import scipy.spatial.distance.mahalanobis
x = [19, 8, 0, 0, 2, 1, 0, 0, 18, 0, 1673, 9, 218]
y = [17, 6, 0, 0, 1, 2, 0, 0, 8, 0, 984, 9, 30]
scipy.spatial.distance.mahalanobis(x,y,np.linalg.inv(np.cov(x,y)))
但我收到此错误消息:
/usr/lib/python2.7/dist-packages/scipy/spatial/distance.pyc in mahalanobis(u, v, VI)
498 v = np.asarray(v, order='c')
499 VI = np.asarray(VI, order='c')
--> 500 return np.sqrt(np.dot(np.dot((u-v),VI),(u-v).T).sum())
501
502 def chebyshev(u, v):
ValueError: matrices are not aligned
Scipy Doc说,VI是协方差矩阵的逆,我认为np.cov是协方差矩阵,np.linalg.inv是矩阵的逆…
但是我看到这里是什么问题(矩阵未对齐):矩阵VI的尺寸错误(2×2而不是13×13).
所以可能的解决方案是这样做:
VI = np.linalg.inv(np.cov(np.vstack((x,y)).T))
但是不幸的是np.cov(np.vstack((x,y)).T)的det为0,这意味着不存在逆矩阵.
所以,当我什至无法计算协方差矩阵时,如何使用马哈拉诺比斯距离测度?
解决方法:
您没有用于计算协方差的样本集.您可能只需要此处的欧几里得距离(np.linalg.norm(x-y)).您要实现的目标是什么?