【发布时间】:2021-08-06 17:02:53
【问题描述】:
我有一个原始数组,例如:
import numpy as np
original = np.array([56, 30, 48, 47, 39, 38, 44, 18, 64, 56, 34, 53, 74, 17, 72, 13, 30, 17, 53])
所需的输出是一个由固定大小的窗口组成的数组,该窗口通过多次迭代滑动,类似于
[56, 30, 48, 47, 39, 38],
[30, 48, 47, 39, 38, 44],
[48, 47, 39, 38, 44, 18],
[47, 39, 38, 44, 18, 64],
[39, 38, 44, 18, 64, 56],
[38, 44, 18, 64, 56, 34],
[44, 18, 64, 56, 34, 53],
[18, 64, 56, 34, 53, 74],
[64, 56, 34, 53, 74, 17],
[56, 34, 53, 74, 17, 72]
目前我正在使用
def myfunc():
return np.array([original[i: i+k] for i in range(i_range)])
使用参数i_range = 10 和k = 6,使用python 的timeit 模块(10000 iter),我接近0.1 秒。这有可能提高 100 倍吗?
我也尝试过 Numba,但结果并不理想,因为它在使用更大的阵列时效果更好。
注意:本文中使用的数组为演示目的而减少,original 的实际大小约为 500。
【问题讨论】:
-
感谢所有贡献者,我已经找到了我正在寻找的东西,使用
numpy.lib.stride_tricks包和rolling_window函数的略微修改版本发布here。来源:rigtorp.se/2011/01/01/rolling-statistics-numpy.html