В чем разница между 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, вы можете передать флаг, который отменяет это.
также, по словам ответ на