我正在尝试使用 NumPy 1.8.0 和 Python 2.7.3 将 MATLAB/Octave 程序移植到 Python。我使用此参考资料帮助我成功地将 MATLAB 函数转换为 NumPy 方法,直到我想计算两个矩阵之间的相关性为止。
第一个矩阵是 40000x25 个浮点数,第二个矩阵是 40000x1 个整数。在 Octave 中,我使用该语句corr(a,b)
并获得一个 25x1 的浮点矩阵。在 NumPy ( ) 中尝试相应的方法numpy.correlate(a,b)
会产生错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/numpy-1.8.0.dev_1a9aa5a_20130415-py2.7-macosx-10.8-intel.egg/numpy/core/numeric.py", line 751, in correlate
return multiarray.correlate2(a,v,mode)
ValueError: object too deep for desired array
如果我更改代码以计算 的每一列的相关性,我可以让它工作a
,如下所示:
for i in range(25):
c2[i] = numpy.correlate(a[:,i], b)
但是,c2
数组中的值与 Octave 的输出不同。Octave 返回一个 25x1 的浮点矩阵,全部小于 1。我从 NumPy 获得的值是介于 -270 和 900 之间的浮点数。
我试图了解这两种算法在幕后做了什么,但却惨遭失败。有人可以指出我的逻辑错误吗?