пересчитывать временные ряды на одинаковом интервале в numpy / scipy? - PullRequest
1 голос
/ 18 сентября 2019

У меня есть случайная величина X, выбранная в случайное время T, аналогичная данным игрушки:

import numpy as np
T = np.random.exponential(size=1000).cumsum()
X = np.random.normal(size=1000)

Эта серия времени выглядит следующим образом: enter image description here

Ключевым моментом является то, что интервал выборки является неоднородным: под этим я подразумеваю, что все элементы np.diff(T) не равны.Мне нужно выполнить повторную выборку временных рядов T,X на равных интервалах с заданной шириной dt, то есть (np.diff(T)==dt).all() должен вернуть True.

Я могу выполнить повторную выборку временных рядов на равных интервалах, используя scipy.interpolate.interp1d, ноэтот метод не позволяет мне указать размер интервала dt:

from scipy.interpolate import interp1d
T = np.linspace(T.min(),T.max(),T.size) # same range and size with a uniform interval
F = interp1d(T,X,fill_value='extrapolate') # resample the series on uniform interval
X = F(T) # Now it's resampled.

Существенная проблема состоит в том, что interp1d не принимает массив T, если T.size==X.size.

Есть ли другой способ, которым я могу попытаться пересчитать временной ряд T,X на равных интервалах ширины dt?

1 Ответ

1 голос
/ 18 сентября 2019
dt = ...
from scipy.interpolate import interp1d   
Told = np.arange(T.min(),T.max(),T.size)
F = interp1d(Told,X,fill_value='extrapolate') 
Tnew = np.linspace(T.min(), T.max(), dt)
Xnew = F(Tnew)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...