Я посмотрел this question, но на самом деле он не дал мне никаких ответов.Интерпретация (и сравнение) вывода из numpy.correlate
По существу, как я могу определить, существует или нет сильная корреляция с использованием np.correlate
? Я ожидаю такой же результат, как и у модели Matlab xcorr
, с опцией 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])
Edit: Это было плохо задаваемый вопрос, но отмеченная ответ не ответил, что было предложено. Я думаю, что важно отметить то, что я нашел, когда вы копались в этой области, вы не можете сравнивать выходы от кросс-корреляции. Другими словами, было бы нецелесообразно использовать выходы из кросс-корреляции, чтобы сказать сигнал x лучше коррелирован с сигналом y чем сигнал z. Кросс-корреляция не предоставляет такой вид информации
Из того, что я прочитал о ['xcorr'] (http://de.mathworks.com/help/signal/ref/xcorr.html?requestedDomain=www.mathworks.com), вывод не нормирован на [0,1]. Кажется, что он идентичен 'numpy.correlate'. –
@ ChristophTerasa Извините, я имел в виду 'xcorr' с опцией' coeff'. Вопрос исправлен. – RockJake28