NumPy 1.8.0 と Python 2.7.3 を使用して、MATLAB/Octave プログラムを Python に移植しようとしています。私はこのリファレンスを MATLAB 関数を NumPy メソッドに変換する際の助けとして使用してきましたが、2 つの行列間の相関を計算したいところまで行き着きました。
最初のマトリックスは 40000x25 float で、2 番目のマトリックスは 40000x1 int です。Octave では、ステートメントを使用しcorr(a,b)
て 25x1 の float 行列を取得します。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 は、すべて 1 未満の浮動小数点数の 25x1 行列を返します。NumPy から取得した値は、-270 から 900 の間の浮動小数点数です。
2 つのアルゴリズムが内部で何をしているのかを理解しようとしましたが、惨めに失敗しました。誰かが私の論理的な失敗を指摘できますか?