【问题标题】:resample time series on uniform interval in numpy/scipy?在numpy / scipy中以均匀间隔重新采样时间序列?
【发布时间】:2019-09-18 20:18:02
【问题描述】:

我有一个随机变量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 重新采样?

【问题讨论】:

    标签: numpy scipy


    【解决方案1】:
    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)
    

    【讨论】:

    • 哦,是的,当然。哈哈谢谢你!但是我认为linspace 应该是arange
    猜你喜欢
    • 2016-02-21
    • 2022-08-03
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多