【发布时间】:2012-04-13 16:24:50
【问题描述】:
我一直在尝试验证我的代码以计算用 Python 编写的 Mahalanobis 距离(并仔细检查以比较 OpenCV 中的结果) 我的数据点每个都是 1 维(5 行 x 1 列)。
在OpenCV (C++)中,当数据点的维度为上述维度时,我成功计算了马氏距离。
当矩阵的维度为 5 行 x 1 列时,以下代码在计算马氏距离时不成功。 但是当矩阵中的列数超过1时它起作用:
import numpy;
import scipy.spatial.distance;
s = numpy.array([[20],[123],[113],[103],[123]]);
covar = numpy.cov(s, rowvar=0);
invcovar = numpy.linalg.inv(covar)
print scipy.spatial.distance.mahalanobis(s[0],s[1],invcovar);
我收到以下错误:
Traceback (most recent call last):
File "/home/abc/Desktop/Return.py", line 6, in <module>
invcovar = numpy.linalg.inv(covar)
File "/usr/lib/python2.6/dist-packages/numpy/linalg/linalg.py", line 355, in inv
return wrap(solve(a, identity(a.shape[0], dtype=a.dtype)))
IndexError: tuple index out of range
【问题讨论】:
-
如果我理解正确,
numpy.linalg.inv方法需要square matrix,但您似乎给了它一个单元素数组。 -
我明白这一点。那么,有解决办法吗?
-
一维马氏距离称为 z-score。此链接可能会有所帮助:statisticshowto.datasciencecentral.com/…
标签: python classification