【问题标题】:Numpy : 3D to 2DNumpy:3D 到 2D
【发布时间】:2019-01-11 11:23:16
【问题描述】:

我有一个形状为[2000, 140, 190] 的矩阵。这里,2000 是 2D 切片的数量,其中每个切片为 [140, 190]。

我想将此 3D 矩阵转换为 [7000, 7600](提示:140*50 = 7000190*40 = 760050*40 = 2000)。我想以行主要方式扩展矩阵。有什么指点吗?

【问题讨论】:

  • 有很多关于np.reshape 的文档,但请注意40*502000,而不是200
  • 我的错。错字..!
  • 有太多的方式来解释这一点。你能解释一下m3d[i,j,k]m2d 中的位置吗? m2d[40*j + j%40, j//40 + 50*k] 是众多选项之一。
  • @Eric :是的,m3D 映射到 m2D。我有 2D 图像(140X190)的芯片,它们总共有 2000 个。从中提取这些芯片的图像的原始大小是(7000X7600),即我在 x 方向提取 50 个芯片,在 y 方向提取 40 个芯片。现在,我想从这个 3D 矩阵重建完整的图像。

标签: python python-3.x python-2.7 numpy numpy-ndarray


【解决方案1】:

听起来你也想要一个转置:

m_3d = np.random.rand(2000, 140, 190)

# break the 2000 dimension in two. Pick one:
m_4d = m_3d.reshape((50, 40, 140, 190))

# move the dimensions to collapse to be adjacent
# you might need to tweak this - you haven't given enough information to know
# what order you want
m_4d = m_4d.transpose((0, 2, 1, 3))

# collapse adjacent dimensions
m_2d = m_4d.reshape((7000, 7600))

【讨论】:

    【解决方案2】:

    如前所述,解决方案是reshape,如果你想要row major,那么根据文档你应该将order设置为F

    m_2d = np.random.rand(7000, 7600)
    m_3d = m_2d.reshape([2000, 140, 190],order='F')
    

    【讨论】:

      【解决方案3】:

      如 cmets 中所述,您可以 np.reshape

      m_2d = np.random.rand(7000, 7600)
      m_3d = m_2d.reshape([2000, 140, 190])
      

      【讨论】:

        猜你喜欢
        • 2012-12-09
        • 2012-12-31
        • 2015-05-14
        • 2021-07-14
        • 2019-07-10
        • 1970-01-01
        • 2019-09-18
        • 2015-04-16
        相关资源
        最近更新 更多