Вопрос о numpy корреляте: не дает ожидаемого результата - PullRequest
3 голосов
/ 02 апреля 2020

Я хочу убедиться, что правильно использую коррелят numpy, он не дает мне ожидаемого ответа. Возможно, я неправильно понимаю функцию корреляции. Вот фрагмент кода с комментариями:

import numpy as np
ref = np.sin(np.linspace(-2*np.pi, 2*np.pi, 10000)) # make some data
fragment = ref[2149:7022] # create a fragment of data from ref
corr = np.correlate(ref, fragment) # Find the correlation between the two
maxLag = np.argmax(corr) # find the maximum lag, this should be the offset that we chose above, 2149
print(maxLag)
2167 # I expected this to be 2149.

Разве это не индекс в массиве corr, где корреляция является максимальной задержкой между этими двумя наборами данных? Я бы подумал, что начальный индекс, который я выбрал для меньшего набора данных, будет смещением с наибольшей корреляцией.

Почему существует расхождение между тем, что я ожидаю, 2149 и результатом, 2167?

Спасибо

1 Ответ

1 голос
/ 02 апреля 2020

Для меня это похоже на погрешность точности, взаимная корреляция является интегралом, и она всегда будет иметь проблемы при представлении в дискретном пространстве, я думаю, что проблема возникает, когда значения близки к 0. Может быть, если вы увеличите числа или увеличьте точность, чтобы разница исчезла, но я не думаю, что это действительно необходимо, поскольку вы уже имеете дело с приближением при использовании дискретной взаимной корреляции, ниже приведен график корреляции, поскольку вы видите, что значения действительно близки :

enter image description here

...