Я просмотрел этот вопрос, но он не т действительно дал мне какие-либо ответы.
По сути, как я могу определить, существует ли сильная корреляция или нет, используя np.correlate
? Я ожидаю того же результата, что и от xcorr
в Matlab с опцией coeff
, которую я могу понять (1 — это сильная корреляция при задержке l
, а 0 — отсутствие корреляции при задержке l
), но np.correlate
дает значения больше 1, даже когда вход векторы были нормализованы между 0 и 1.
Пример ввода
import numpy as np
x = np.random.rand(10)
y = np.random.rand(10)
np.correlate(x, y, 'full')
Это дает следующий результат:
array([ 0.15711279, 0.24562736, 0.48078652, 0.69477838, 1.07376669,
1.28020871, 1.39717118, 1.78545567, 1.85084435, 1.89776181,
1.92940874, 2.05102884, 1.35671247, 1.54329503, 0.8892999 ,
0.67574802, 0.90464743, 0.20475408, 0.33001517])
Как я могу сказать, что такое сильная корреляция, а что слабая, если я не знаю, каково максимально возможное значение корреляции?
Другой пример:
In [10]: x = [0,1,2,1,0,0]
In [11]: y = [0,0,1,2,1,0]
In [12]: np.correlate(x, y, 'full')
Out[12]: array([0, 0, 1, 4, 6, 4, 1, 0, 0, 0, 0])
Редактировать: это был неправильно заданный вопрос, но помеченный ответ действительно отвечает тому, что было задано. Я думаю, что важно отметить то, что я обнаружил, копаясь в этой области: вы не можете сравнивать результаты кросс-корреляции. Другими словами, было бы недопустимо использовать выходные данные кросс-корреляции, чтобы сказать, что сигнал x лучше коррелирует с сигналом y, чем с сигналом z. Взаимная корреляция не дает такой информации
xcorr
, вывод также не нормализуется до [0,1]. Кажется, он ведет себя так же, какnumpy.correlate
. - person Jan Christoph Terasa   schedule 08.05.2016xcorr
с опциейcoeff
. Вопрос исправлен. - person JakeCowton   schedule 08.05.2016