首页 > 解决方案 > 在 numpy 数组中运行 max-min 的窗口。

问题描述

我正在尝试在 numpy 数组上执行“运行最大最小窗口”,以便对于给定的窗口大小,该函数返回该窗口的最大值和最小值之间的距离。

我还想确定窗口每个“跳过”的长度。

例如:

如果x_array = np.array([3,5,1,8,3,5,2,2])

大小2和跳过长度的运行窗口2应该导致: [2, 7, 2, 0]因为第一个窗口是3, 5,第二个窗口是1,8等等。

当然可以使用简单的 for 循环来完成,但我正在努力思考更好的解决方案。

任何帮助,将不胜感激。

标签: pythonnumpy

解决方案


从这个答案中采用一点,你可以做的是

from numpy.lib.stride_tricks import as_strided

def running_max_min(a, window_size, step_size):
    nrows = (a.size - window_size)//step_size + 1
    n = a.strides[0]
    s = as_strided(a, shape=(nrows, window_size), strides=(step_size*n, n))
    return s.ptp(1)

例如,

In [22]: running_max_min(x_array, 2, 2)
Out[22]: array([2, 7, 2, 0])

推荐阅读