dir*_*s45 2 arrays numpy sliding-window
说我有一个像这样的数组:
array([1, 2, 3, 4, 5, 5, 7, 8, 9, 10])
Run Code Online (Sandbox Code Playgroud)
我想把它改成
array([1, 2, 3, 4]), array([3, 4, 5, 6]), array([5, 6, 7, 8]), array([7, 8, 9, 10])
Run Code Online (Sandbox Code Playgroud)
这里的窗口大小是4,并且步长是2.
我怎么能在Python函数中这样做?
你要 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]])
Run Code Online (Sandbox Code Playgroud)
copy = True如果要写入窗口数组,请务必设置它,否则它是内存共享视图.