在 numpy/scipy 中按均匀间隔重新采样时间序列?

kev*_*aks 8 numpy scipy

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

import numpy as np
T = np.random.exponential(size=1000).cumsum()
X = np.random.normal(size=1000)
Run Code Online (Sandbox Code Playgroud)

这个时间序列看起来像这样: 在此输入图像描述

关键点是采样间隔不均匀:我的意思是 的所有元素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.
Run Code Online (Sandbox Code Playgroud)

本质问题是interp1d不接受数组,T除非T.size==X.size.

是否有另一种方法可以尝试以T,X均匀的宽度间隔对时间序列进行重新采样dt

Kyl*_*ena 8

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)
Run Code Online (Sandbox Code Playgroud)

  • 哦,是的,当然。哈哈谢谢你!不过我认为“linspace”应该是“arange”! (2认同)