В чем разница между MATLAB/Octave corr и Python numpy.коррелировать?

Я пытаюсь перенести программу MATLAB / Octave на Python, используя NumPy 1.8.0 и Python 2.7.3. Я использовал этой ссылке как помощь в преобразовании функций MATLAB в методы NumPy с большим успехом, пока я не доберусь до точки, где я хочу вычислить корреляцию между двумя матрицами.

первая Матрица 40000x25 поплавков, вторая матрица 40000x1 ints. В Октаве я использую оператор 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 массив отличается от вывода из Октавы. Октава возвращает матрицу 25x1 поплавков все меньше 1. Значения, которые я получаю от NumPy, находятся между -270 и 900.

Я попытался понять, что делают два алгоритма под капюшон, но с треском провалился. Кто-нибудь может указать на мою логическую ошибку?

1 ответов


похоже, что существует numpy.corrcoef который вычисляет коэффициенты корреляции, по желанию. Однако его интерфейс отличается от Октавы / Matlab corr.

прежде всего, по умолчанию функция обрабатывает строки как переменные, а столбцы-как наблюдения. Чтобы имитировать поведение Octave / Matlab, вы можете передать флаг, который отменяет это.

также, по словам ответ на