我有以下二维数组的二维数组(即块矩阵):
M = np.array([[[[-26., 20.],
[ 20., -20.]],
[[-42., 30.],
[ 30., -32.]]],
[[[-42., 30.],
[ 30., -32.]],
[[-42., 30.],
[ 30., -32.]]]])
,我想把它转换成二维数组,如下所示:
M2 = np.array([[-26, -20, -42, 30], [20, -20, 30, -32], [-42, 30, -42, 30], [30, -32, 30, -32]])
我正在寻找一个优雅的解决方案,不使用循环。有人能帮我吗?提前谢谢你。
您有一个4d数组,并且您的输出顺序与输入顺序不匹配。在重塑之前,您需要先调换数组(旋转轴):
row_size = M.shape[-1] * M.shape[0]
M.transpose((1, 2, 0, 3)).reshape(-1, row_size)
[[-26. 20. -42. 30.]
[ 20. -20. 30. -32.]
[-42. 30. -42. 30.]
[ 30. -32. 30. -32.]]
或者等价地stack
沿着它的最后一个轴,然后重塑:
row_size = M.shape[-1] * M.shape[0]
np.stack(M, 2).reshape(-1, row_size)
[[-26. 20. -42. 30.]
[ 20. -20. 30. -32.]
[-42. 30. -42. 30.]
[ 30. -32. 30. -32.]]