numpy/scipy中均匀间隔时间序列重采样

bfhwhh0e  于 2023-03-12  发布在  其他
关注(0)|答案(2)|浏览(281)

我有一个随机变量X,在随机时间T采样,类似于这个玩具数据:

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

此时间序列如下所示:

关键的一点是采样间隔是不均匀的:我的意思是np.diff(T)的所有元素不相等。我需要以指定的宽度dt在均匀间隔上对时间序列T,X进行重采样,这意味着(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
是否有其他方法可以尝试在宽度为dt的均匀间隔上对时间序列T,X进行重采样?

enyaitl3

enyaitl31#

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)
juzqafwq

juzqafwq2#

这对我很有帮助。但是请注意,这行

F = interp1d(Told,X,fill_value='extrapolate')

不正确。它应该是:'

F = interp1d(Told,X,kind='extrapolate')

或者(在我的例子中更有用):

F = interp1d(Told,X,kind='previous')

相关问题