Я получил два массива данных, которые я хочу кросс-коррелировать, и получил длину задержки (если есть) между двумя массивами, а затем нормализовал ее между 0 и 1. Например:
import numpy as np
x = [0,1,1,1,2,0,0]
y = [0,0,0,1,1,1,2]
corr = np.correlate(a,b, 'full')
norm = np.linalg.norm
normalized = corr/(norm(a)*norm(b))
возвращает:
[0.0, 0.0, 0.29, 0.43, 0.57, 1.0, 0.57, 0.43, 0.29, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Проблема в том, что мне нужно соотнести две графики, и массив X не является регулярным (и не одинаковым для двух массивов, есть только некоторые связанные значения yдо некоторого значения x), поэтому я интерполирую данные до сопоставления с scipy.interpolate.interp1d
, и это приводит к появлению записей NaN в моем массиве.В этот момент корреляционная функция возвращает только NaN
Например:
import numpy as np
x = [0,1,1,1,2,0,np.nan]
y = [np.nan,0,0,1,1,1,2]
corr = np.correlate(a,b, 'full')
norm = np.linalg.norm
normalized = corr/(norm(a)*norm(b))
возвращает:
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]
Я наконец понял, что получаю это, потому что норма (а)Результаты NaN, мой вопрос: как я могу просто игнорировать эти значения NaN, есть ли лучший способ взаимной корреляции двух массивов?Я уже тестировал запуск interp1d
с fill_value='extrapolate'
, но это вызывает проблемы в расчете корреляции.Есть ли другое значение, которое я могу передать в fill_value, которое будет «игнорировать» пропущенные значения в данных?
Кроме того, np.correlate(x,y)
возвращает NaN
, но если мы посмотрим на np.correlate(x,y,'full')
, то на самом деле вернет [ 0. 0. 2. 3. 4. 7. 4. nan nan nan nan nan nan nan nan]
, Почему NumPy принимает NaN в качестве максимального значения?