【问题标题】:Read 3D array and plot it as 2D like a picture without converting from 3D to 2D like np.concatenate读取 3D 数组并将其绘制为像图片一样的 2D,而无需像 np.concatenate 那样从 3D 转换为 2D
【发布时间】:2021-06-02 19:49:02
【问题描述】:
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 像这张图片。

如果我无法解释,我通常需要将我们必须的数组转换为 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。

【问题讨论】:

  • “代表性”情节没有帮助。你想绘制什么?积分?线?你会展示什么?你有一个 (4,3,5) 数组。您如何将其映射到情节?
  • 如我所写,我会将数组中的第 3 个维度相加得到一个二维数组。
  • 如果不将其转换为二维数组,您将无法获得该图。
  • 大多数 NumPy 方法不会改变原始数组;如果你想使用这样的方法,你可以运行 .copy() 来复制原始文件,将其重新格式化为你需要的 2D 版本,然后绘制它。
  • 我看到你已经接受了我的回答,但我不得不说,即使没有使用concatenate等显式复制,数据也会被复制

标签: python numpy matplotlib numpy-ndarray imshow


【解决方案1】:

你的头像


描绘了一个 3 行 × 20 列的数组,您从 (4,3,5) 形状开始,并从您打印的 2D 数组开始

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))
...

这给了我

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 2021-08-21
    • 2012-07-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2020-06-04
    相关资源
    最近更新 更多