读取 3D 数组并将其绘制为像图片一样的 2D,而无需像 np.concatenate 那样从 3D 转换为 2D

Read 3D array and plot it as 2D like a picture without converting from 3D to 2D like np.concatenate

x = np.array[[[8, 7, 1, 0, 3],
              [2, 8, 5, 5, 2],
              [1, 1, 1, 1, 1]],

             [[8, 4, 1, 0, 0],
              [6, 8, 5, 5, 2],
              [1, 1, 1, 1, 1]],

             [[2, 4, 0, 2, 3],
              [2, 5, 5, 3, 2],
              [1, 1, 1, 1, 1]],

             [[4, 7, 2, 8, 0],
              [1, 3, 6, 5, 2],
              [1, 1, 1, 1, 1]]]

我想使用 matplotlib 库的 imshow() 命令从此 NumPy 文件获取图像,但我不应该将其转换为 3d 数组。有什么方法可以读取 3D 数组并将其绘制为 2D,就像这张照片一样。

如果我无法解释,我通常需要将我们必须的数组转换为二维并绘制它。通常我可以为此使用 np.concatenatenp.append 之类的命令并获得以下数组。

x = np.array[[[8, 7, 1, 0, 3, 8, 4, 1, 0, 0, 2, 4, 0, 2, 3, 4, 7, 2, 8, 0],
              [2, 8, 5, 5, 2, 6, 8, 5, 5, 2, 2, 5, 5, 3, 2, 1, 3, 6, 5, 2],
              [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

但我需要在不将其转换为 2D 的情况下绘制它。

你的头像


描绘了一个 3 行 × 20 列的数组,您从 (4,3,5) 形状开始,然后从您打印的二维数组

x = np.array([[8, 7, 1, 0, 3, 8, 4, 1, 0, 0, 2, 4, 0, 2, 3, 4, 7, 2, 8, 0],
              [2, 8, 5, 5, 2, 6, 8, 5, 5, 2, 2, 5, 5, 3, 2, 1, 3, 6, 5, 2],
              [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])

我看到您需要连接 4 个 3 行 5 列的矩阵,因此最后一个维度必须保持不变,而前两个轴必须交换,所以我认为正确的咒语是

...
plt.imshow(np.transpose(x, (1,0,2)).reshape(3,20))
...

这给了我