方法#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