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

标签 python python-3.x numpy window

有没有办法在 Numpy 中有效地实现一维数组的滚动窗口?

例如,我有这个纯 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 的标准差是微不足道的,但滚动窗口部分完全难倒我。

我找到了 this关于 Numpy 中滚动窗口的博客文章,但它似乎不适用于一维数组。

最佳答案

只需使用博客代码,但将您的函数应用于结果。

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)

关于python - Numpy中一维数组的滚动窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811183/

相关文章:

python - 如何使用 Folium 将聚类标记添加到 Choropleth

python - : Python, ctypes.windll.user32.SystemParametersInfoA 中的参数是什么?

python - 使我的 NumPy 数组跨进程共享

python - Django "can' t 在模型中设置属性

python - 希望在 Python 中模拟 socat 的功能

python-3.x - 在 python 中保留所有字母和数字字符

python - scipy gaussian_kde 根据使用的方法(权重与无权重)产生不同的结果

python - 如何使用 NumPy 将单色噪声添加到 PyGame 表面?

python - 列表索引超出范围?

Python 3.x 短内存数字猜测(编程/数学)