将 5D 数组重塑为 2D 数组

Reshape 5D array to 2D array

我有一个形状为 (26, 396, 1, 1, 6) 的数组,我想将其转换为此形状 (10296, 6),这意味着我想将 396 个数组堆叠在一起.

我试过了:

a = b.reshape(26*396,6)

但这并不能正确地“堆叠”它们。我希望 (1, 396, 1, 1, 6) 成为新数组的前 396 个数组,(2, 396, 1, 1, 6) 成为数组的下一个 396 个数组,(3, 396, 1, 1, 6) 下一个等等。

我相信您正在寻找的是使用 np.concatenate:

连接第二个轴
>>> np.concatenate(x, 1).reshape(-1, 6)

或者,您可以使用 np.hstack:

>>> np.hstack(x).reshape(-1, 6)

或者,如评论中 @Yann Ziselman 所述,您可以在重塑为最终形式之前交换前两个轴:

x.swapaxes(0,1).reshape(-1, 6)

这是一个最小的例子:

>>> x = np.random.rand(3, 4, 1, 1, 3)
array([[[[[0.66762863, 0.67280411, 0.8053661 ]]],


        [[[0.55051478, 0.79648146, 0.66660467]]]],



       [[[[0.58070253, 0.76738551, 0.30835528]]],


        [[[0.10904043, 0.13234366, 0.25146988]]]]])


>>> np.hstack(x).reshape(-1, 3)
array([[0.66762863, 0.67280411, 0.8053661 ],
       [0.58070253, 0.76738551, 0.30835528],
       [0.55051478, 0.79648146, 0.66660467],
       [0.10904043, 0.13234366, 0.25146988]])

>>> np.reshape(-1, 3) # compared to flattening operation
array([[0.66762863, 0.67280411, 0.8053661 ],
       [0.55051478, 0.79648146, 0.66660467],
       [0.58070253, 0.76738551, 0.30835528],
       [0.10904043, 0.13234366, 0.25146988]])