Нормализованная взаимная корреляция в Python - PullRequest
0 голосов
/ 22 ноября 2018

Я боролся в последние дни, пытаясь вычислить степени свободы двух пар векторов (x и y) после ссылки Челтона (1983):

степеней свободы согласноЧелтону (1983)

, и я не могу найти правильный способ вычисления нормализованной функции взаимной корреляции с использованием np.correlate, я всегда получаю вывод, что он не находится между -1,1.

Есть ли простой способ нормализовать функцию взаимной корреляции для вычисления степеней свободы двух векторов?

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Нормализованная формула взаимной корреляции: Источник: https://anomaly.io/detect-correlation-time-series/ Normalized Cross-Correlation formula

Код Python: 'a' и 'b' - серии, чтобы найти корреляцию, и ее типявляются пандами. Дата данных

np.sum((a*b))/(np.sqrt((np.sum(a**2))*(np.sum(b**2))))
0 голосов
/ 22 ноября 2018

Хороший вопрос.Прямого пути нет, но вы можете «нормализовать» входные векторы перед использованием np.correlate, как это, и разумные значения будут возвращены в диапазоне [-1,1]:

Здесь я определяю корреляцию какобычно определяется в учебниках по обработке сигналов.

c'_{ab}[k] = sum_n a[n] conj(b[n+k])

КОД: Если a и b - векторы:

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

Ссылки:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.correlate.html

https://en.wikipedia.org/wiki/Cross-correlation

enter image description here

...