代码之家  ›  专栏  ›  技术社区  ›  user2398046

如何创建与numpy阵列重叠50%的滑动窗口?[副本]

  •  7
  • user2398046  · 技术社区  · 7 年前

    假设我有这样一个数组:

    array([1, 2, 3, 4, 5, 5, 7, 8, 9, 10])
    

    我想把它改成

    array([1, 2, 3, 4]), array([3, 4, 5, 6]), array([5, 6, 7, 8]), array([7, 8, 9, 10])
    

    4 ,步长为 2 .

    1 回复  |  直到 7 年前
        1
  •  14
  •   Daniel F    7 年前

    你想要的 numpy.lib.stride_tricks.as_strided

    def window(a, w = 4, o = 2, copy = False):
        sh = (a.size - w + 1, w)
        st = a.strides * 2
        view = np.lib.stride_tricks.as_strided(a, strides = st, shape = sh)[0::o]
        if copy:
            return view.copy()
        else:
            return view
    
    Out[]: 
    array([[ 1,  2,  3,  4],
           [ 3,  4,  5,  6],
           [ 5,  6,  7,  8],
           [ 7,  8,  9, 10]])
    

    copy = True 如果您想写入窗口阵列,它会显示,否则它是一个内存共享视图。