python - 如何将函数应用于 numpy 中的滚动窗口?

标签 python numpy

我有一系列点 (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/

相关文章:

python - Python 新手……Python 3 和 Matplotlib

python - 数组按括号中的条件索引

python-2.7 - 如何将2D椭圆拟合到给定点

python - 检查列表是否包含多个字符中的任何一个

Python:何时使用线程与多处理

python - 截断十进制数字 numpy float 组

python - 检查 2 列表中有多少值相等

python - 如何绘制重叠时颜色变深的透明线?

python numpy - 提高列余弦相似度的效率

python - 当 header 不在文件开头时是否可以使用 ConfigParser?