Python 如何高效地滑动numpy阵列?

Python 如何高效地滑动numpy阵列?,python,numpy,Python,Numpy,我想滑动一个和numpy阵列。 目前,下面的代码完成了这项工作 import numpy as np arr = np.array([np.arange(0,16), np.arange(17,33),np.arange(33,49)]) window_size=4 expected_opt=[arr [:, i:i+window_size]for i in range(0,16,window_size)] 但我想知道是否有更有效的方法来实现类似的目标 有人可能会建议,但解决方案会给出不同的输

我想滑动一个和numpy阵列。 目前,下面的代码完成了这项工作

import numpy as np
arr = np.array([np.arange(0,16), np.arange(17,33),np.arange(33,49)])
window_size=4
expected_opt=[arr [:, i:i+window_size]for i in range(0,16,window_size)]
但我想知道是否有更有效的方法来实现类似的目标


有人可能会建议,但解决方案会给出不同的输出。

您看到的是重塑,而不是滚动:

arr.reshape(arr.shape[0],-1,window_size).transpose(1,0,2)
输出:

array([[[ 0,  1,  2,  3],
        [17, 18, 19, 20],
        [33, 34, 35, 36]],

       [[ 4,  5,  6,  7],
        [21, 22, 23, 24],
        [37, 38, 39, 40]],

       [[ 8,  9, 10, 11],
        [25, 26, 27, 28],
        [41, 42, 43, 44]],

       [[12, 13, 14, 15],
        [29, 30, 31, 32],
        [45, 46, 47, 48]]])

嗨@Quang,谢谢你的建议。但是,如果我将窗口大小更改为2,则结果是不一致的。对了,形状应该是(8,3,2)@balandongiv,谢谢你指出这一点。我更新了答案。很好,现在窗口大小=2,4,8给出了预期的结果