方法#1
一個與np.lib.stride_tricks.as_strided
做法,給了我們一個view
到輸入2D
陣列,因此不會佔用了內存空間 -
L = 3 # window length for sliding along the first axis
s0,s1 = a.strides
shp = a.shape
out_shp = shp[0] - L + 1, L, shp[1]
strided = np.lib.stride_tricks.as_strided
out = strided(a[L-1:], shape=out_shp, strides=(s0,-s0,s1))
樣品輸入,輸出 -
In [43]: a
Out[43]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12],
[13, 14, 15]])
In [44]: out
Out[44]:
array([[[ 7, 8, 9],
[ 4, 5, 6],
[ 1, 2, 3]],
[[10, 11, 12],
[ 7, 8, 9],
[ 4, 5, 6]],
[[13, 14, 15],
[10, 11, 12],
[ 7, 8, 9]]])
方法2
或者,在生成所有行索引的有點容易用一個broadcasting
-
In [56]: a[range(L-1,-1,-1) + np.arange(shp[0]-L+1)[:,None]]
Out[56]:
array([[[ 7, 8, 9],
[ 4, 5, 6],
[ 1, 2, 3]],
[[10, 11, 12],
[ 7, 8, 9],
[ 4, 5, 6]],
[[13, 14, 15],
[10, 11, 12],
[ 7, 8, 9]]])
我想我明白你想要什麼,但它與你在問題中寫下的內容沒有任何關係。到目前爲止你做了什麼?請發佈您的代碼。 – DyZ
@DYZ不確定混淆的地方。 OP已經列出了2D輸入和預期的3D輸出,該輸出具有從2D輸入中拾取的行,這些行是當前的行和先前的行,再次列出在期望的輸出中。 – Divakar