让我通过一个小例子来解释它:
>>> x = np.array([[1,2], [3,4], [5,6], [7,8]])
>>> x
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
我想要一个具有以下形式的新数组
array([[0, 0, 1, 2, 3, 4],
[1, 2, 3, 4, 5, 6],
[3, 4, 5, 6, 7, 8],
[5, 6, 7, 8, 0, 0]])
在这里,上下文的大小为 +/-1,但我想让它保持可变。
到目前为止,我正在做的是将零附加到原始数组:
>>> y = np.concatenate((np.zeros((1, 2)), x, np.zeros((1, 2))), axis=0)
>>> y
array([[ 0., 0.],
[ 1., 2.],
[ 3., 4.],
[ 5., 6.],
[ 7., 8.],
[ 0., 0.]])
并通过读取新大小的行将值放入新数组中:
>>> z = np.empty((x.shape[0], x.shape[1]*3))
>>> for i in range(x.shape[0]): z[i] = y[i:i+3].flatten()
那种作品,但我发现它缓慢,丑陋和不合时宜。你能想出一个更好的方法来进行这种重新排列吗?就地解决方案的额外赞许:)