我有一个简单的时间序列,我正在努力估计移动窗口内的方差。更具体地说,我无法找出与实现滑动窗口函数的方式有关的一些问题。例如,当使用NumPy和window size=20时:
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
rolling_window(data, 20)
np.var(rolling_window(data, 20), -1)
datavar=np.var(rolling_window(data, 20), -1)
也许我错在什么地方了,在这个思路。 有人知道一个简单的方法吗? 欢迎任何帮助/建议。
Pandas
rolling_mean
和rolling_std
函数已被弃用,取而代之的是更通用的“滚动”框架。@elyase的示例可以修改为:rolling
函数支持许多不同的窗口类型,如文档所述here。可以对rolling
对象调用许多函数,包括var
和其他有趣的统计数据(skew
、kurt
、quantile
等)。我一直坚持使用std
,因为图与平均值在同一个图上,这在单位方面更合理。尽管是一个老线程,但我将添加另一个由this修改的方法,该方法不依赖panda或python循环。本质上,使用numpy的跨步技巧,您可以首先创建一个具有跨步的数组视图,这样计算沿最后一个轴的函数统计信息就相当于执行滚动统计信息。我修改了原始代码,通过填充添加最后一个轴的开始,输出形状与输入形状相同。
尽管是一个老线程,但我将添加另一个由this修改的方法,它不依赖panda或python循环。本质上,使用numpy的跨步技巧,您可以首先创建一个带跨步的数组视图,这样计算沿最后一个轴的函数统计值就相当于执行滚动统计值。我修改了原始代码,通过填充添加最后一个轴的开始,输出形状与输入形状相同。
你应该看看pandas。例如:
相关问题 更多 >
编程相关推荐