小编典典

Numpy中一维数组的滚动窗口?

python

有没有一种方法可以有效地为Numpy中的1D数组实现滚动窗口?

例如,我有这个纯Python代码段来计算一维列表的滚动标准偏差,其中observations一维值列表和n标准偏差的窗口长度:

stdev = []
for i, data in enumerate(observations[n-1:]):
    strip = observations[i:i+n]
    mean = sum(strip) / n
    stdev.append(sqrt(250*sum([(s-mean)**2 for s in strip])/(n-1)))

有没有办法在Numpy内完全做到这一点,即没有任何Python循环?标准偏差对于而言是微不足道的numpy.std,但是滚动窗口部分完全使我难过。

我发现这个关于numpy的滚动窗口博客文章,但似乎并没有为一维数组。


阅读 193

收藏
2020-12-20

共1个答案

小编典典

只需使用博客代码,然后将功能应用于结果即可。

numpy.std(rolling_window(observations, n), 1)

您所在的位置(来自博客):

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)
2020-12-20