Я пытаюсь перенести программу MATLAB/Octave на Python с помощью NumPy 1.8.0 и Python 2.7.3. Я использовал this reference как помощь в преобразовании функций MATLAB в методы NumPy с большим успехом, пока не дойду до точки, где я хочу вычислить корреляцию между двумя матрицами.В чем разница между MATLAB/Octave corr и Python numpy.correlate?
Первая матрица - 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.
Я попытался понять, что оба алгоритма делают под капотом, но с треском провалились. Может ли кто-нибудь указать на мой логический провал?
Я попытался это, но 'numpy.cov (а, б)' возвращает массив 2х2 поплавков, и я не знаю, как что связано с корреляцией. – Crystal
или попробуйте просто получить [Pearson's r] (http://docs.scipy.org/doc/scipy-0.12.0/reference/generated/scipy.stats.pearsonr.html) – Rasman
или [это] (http: /docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html) – Rasman