【问题标题】:numpy 3D array shapenumpy 3D 数组形状
【发布时间】:2018-03-05 22:41:03
【问题描述】:

我创建了一个形状为 (4,3,2) 的 numpy 数组;我希望下面的代码可以打印出一个形状为 4 X 3 或 3 X 4 的数组

import numpy as np

x = np.zeros((4,3,2), np.int32)

print(x[:][:][0])

但是,我得到了

[[0 0]
 [0 0]
 [0 0]]

看起来像 2 X 3?我现在对 numpy 矩阵感到非常困惑。我不应该得到

  [[0 0 0]
   [0 0 0]
   [0 0 0]
   [0 0 0]]

代替?如何将 3D 图像映射到 numpy 3D 矩阵?

例如,在 MATLAB 中,形状 (m, n, k) 表示(2D/3D)图像上下文中的 (row, col, slice)

非常感谢

【问题讨论】:

  • In numpy the display is (panel, row, col). The first dimension is the outermost one. In MATLAB x(:)` 解开数组,形成 (24,1) 大小。 x(:,:,1) 选择第一个面板。你为什么尝试x[:][:][0]

标签: python arrays numpy matrix


【解决方案1】:

x[:] 沿第一个维度对所有元素进行切片,因此x[:] 给出与x 相同的结果,因此x[:][:][0] 等价于x[0]

要选择最后一个维度上的元素,您可以这样做:

x[..., 0]
#array([[0, 0, 0],
#       [0, 0, 0],
#       [0, 0, 0],
#       [0, 0, 0]], dtype=int32)

或:

x[:,:,0]
#array([[0, 0, 0],
#       [0, 0, 0],
#       [0, 0, 0],
#       [0, 0, 0]], dtype=int32)

【讨论】:

    【解决方案2】:

    您需要在一个元组中同时指定所有切片,如下所示:

    x[:, :, 0]
    

    如果您执行x[:][:][0],您实际上是在索引第一个维度三次。前两个为整个数组创建一个视图,第三个为第一个维度的索引 0 创建一个视图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-03
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 2021-02-22
      相关资源
      最近更新 更多