Я пытаюсь определить сходство между двумя временными рядами 1D, используя numpy.correlate
.
Я написал небольшой пример программы, чтобы узнать больше о том, как работает взаимная корреляция, однако я не совсем понимаю тенденцию в выводе корреляции.
Код:
import numpy as np
import matplotlib.pyplot as plt
#sample arrays to correlate
arr_1 = np.arange(1, 101) #[1, 2, 3, ..... 100]
arr_2 = np.concatenate([np.zeros(50), np.arange(50, 101)]) #[0, 0, ... 50, 51 ... 100]
cross_corr = np.correlate(arr_1, arr_2, "same")
plt.plot(list(cross_corr))
Этот график вызывает у меня пару вопросов. Насколько я понимаю, взаимная корреляция зависит от операции свертки (по сути, интеграл внутреннего произведения двух сигналов с учетом некоторого отставания).
- Почему сигнал корреляции (выше) неуклонно увеличивается от (0, 50), если arr_2 заполнен нулями от индекса 0 до 50?
- Как я могу установить задержку для операции свертки. Из numpy docs я не могу найти параметр, который позволяет мне настроить отставание.
- Пик на 50 связан с тем, что оба сигнала выстраиваются по индексу 50, но почему тогда корреляция неуклонно снижается после этого? Если два сигнала совпадают, то не должна ли корреляция увеличиваться?
- Корреляция значима только в том случае, если ее значение больше 2/sqrt(n - abs(k)). Где n — количество выборок, а k — задержка. Как значимость корреляции может повлиять на график, показанный выше?