这应该是一个简单的问题,要么我遗漏了信息,要么我错编码了。你知道吗
我试图在python中实现Mahalanabois距离,我遵循python中的公式。你知道吗
我的代码如下:
a = np.array([[1, 3, 5]])
b = np.array([[4, 5, 6]])
X = np.empty((0,3), float)
X = np.vstack([X, [2,3,4]])
X = np.vstack([X, a])
X = np.vstack([X, b])
n = ((a-b).T)*(np.cov(X)**-1)*(a-b)
dist = np.sqrt(n)
dist返回一个3x3数组,但我不应该期望一个表示距离的数字吗?你知道吗
dist = array([[ 1.5 , 1.73205081, 1.22474487],
[ 1.73205081 , 2. , 1.41421356],
[ 1.22474487 , 1.41421356, 1. ]])
维基百科并没有(对我)建议它应该返回一个矩阵。在python中搜索mahalanbois距离的实现,我还没有找到可以与之相比的东西。你知道吗
从wiki page你可以看到,} 函数或
a
和b
是向量,但在你的例子中它们是数组。所以你需要反向转置。还有矩阵乘法。在numpy中,*
表示按元素相乘,对于矩阵,应该使用^{np.array
的.dot
方法。对于您的情况,答案是:编辑
正如@roadrunner66注意到的,应该使用逆矩阵而不是元素的逆矩阵。通常} :
np.linalg.inv
适用于这种情况,但对于这种情况,您会遇到单一错误,需要使用^{相关问题 更多 >
编程相关推荐