我有一系列点 (x,y) 数据,我想获取三个点的滚动窗口。我想对每个窗口应用一个函数,基本上映射滚动窗口。我如何在 numpy 中执行此操作?
最佳答案
我认为你可以做这样的事情的最快方法是只制作数组的三个副本,每个副本都相互偏移一个。例如:
In [1]: a = np.arange(12)
In [2]: a
Out[2]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [3]: np.vstack((a,np.roll(a,-1),np.roll(a,-2))).T[:-2]
Out[3]:
array([[ 0, 1, 2],
[ 1, 2, 3],
[ 2, 3, 4],
[ 3, 4, 5],
[ 4, 5, 6],
[ 5, 6, 7],
[ 6, 7, 8],
[ 7, 8, 9],
[ 8, 9, 10],
[ 9, 10, 11]])
然后你就可以用你的函数在最后一个轴上操作了。例如,要计算滚动总和:
def window_function(a):
return np.sum(a,axis=-1)
>>> a = np.arange(12)
>>> map(window_function,[a[i:i+3] for i in range(len(a)-2)])
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
>>> window_function(np.vstack((a,np.roll(a,-1),np.roll(a,-2))).T[:-2])
array([ 3, 6, 9, 12, 15, 18, 21, 24, 27, 30])
这可以用一个函数概括:
def get_rolling_window(a,size):
return np.vstack(np.roll(a,-i) for i in range(size)).T[:-size+1]
关于python - 如何将函数应用于 numpy 中的滚动窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623231/