令人抓狂的reshape
在使用numpy
时,难免要对数据的shape
进行改变。
假设现在有一个numpy
的array
,如下所示,表示创建一个0~10
的形状为(2, 10, 4)
的数组。
a = np.random.randint(0, 10, (2, 5, 4))
其中a
是:
array([[[6, 5, 3, 0],
[1, 9, 7, 1],
[2, 2, 9, 1],
[9, 8, 3, 5],
[4, 0, 2, 5]],
[[7, 0, 0, 7],
[7, 9, 6, 0],
[7, 9, 4, 4],
[0, 8, 2, 2],
[8, 2, 7, 7]]])
我需要做的是(抽象图):
发现
numpy
中的reshape
好像做不到?其中提供了order
参数,包括'A', 'C', 'F'
,这里其他好多博客都介绍了,目前我达不到我想要的效果。
发现使用np.concatenate
和reshape
函数的'F'
模式进行组合,可以达到效果。大致思路是这样(见蓝色部分):
也就是把
a
的两个维度拼起来然后用reshape
的'F'
模式进行形状的改变,代码如下
np.concatenate((a[0], a[1]), axis=0).reshape((5, 2, 4), order="F")
结果
array([[[6, 5, 3, 0],
[7, 0, 0, 7]],
[[1, 9, 7, 1],
[7, 9, 6, 0]],
[[2, 2, 9, 1],
[7, 9, 4, 4]],
[[9, 8, 3, 5],
[0, 8, 2, 2]],
[[4, 0, 2, 5],
[8, 2, 7, 7]]])