python - 为什么 3D numpy 数组按原样打印(它们是如何排序的)?

标签 python numpy multidimensional-array numpy-ndarray

我正在尝试了解 3D 数组(或多维数组),但这有点让我大吃一惊。尤其是 3D numpy 数组的打印方式对我来说是违反直觉的。这个问题是similar但更多的是关于编程语言之间的差异,我仍然没有完全理解。让我尝试解释一下。

假设我想创建一个 3 行(长度)、5 列(宽度)和 2 深度的 3D 数组。所以是一个 3x5x2 矩阵。

我执行以下操作:

import numpy as np
a = np.zeros(30).reshape(3, 5, 2)

对我来说,打印此内容的逻辑方法如下:

[[[0. 0. 0. 0. 0.]  #We can still see three rows from top to bottom
  [0. 0. 0. 0. 0.]] #We can still see five columns from left to right

 [[0. 0. 0. 0. 0.]  #Depth values are shown underneath each other
  [0. 0. 0. 0. 0.]] 

 [[0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0.]]]

但是,当我打印这个数组时,它会像这样打印:

[[[0. 0.] #We can still see three rows from top to bottom,
  [0. 0.] #However columns now also appear from top to bottom instead of from left to right
  [0. 0.] #Depth values are now shown from left to right
  [0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]
  [0. 0.]
  [0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]
  [0. 0.]
  [0. 0.]
  [0. 0.]]]

我不清楚为什么数组会以这种方式打印。也许只是我(也许我的空间推理在这里缺乏),或者 NumPy 数组像这样打印有什么具体原因吗?

最佳答案

将评论综合成正确的答案:

首先,看一下 np.zeros(10).reshape(5, 2)。这是 5 行 2 列,而不是 2 行 5 列。前面加3表示5行2列的3个平面。您缺少的是新维度位于前面,而不是末尾。在数学中,通常在末尾添加额外的维度(就像用 z 扩展 (x,y) 变为 (x,y,z)。但是,在计算机科学中,数组维度通常是这样完成的。它反射(reflect)了数组的方式通常以行优先顺序存储在内存中。

关于python - 为什么 3D numpy 数组按原样打印(它们是如何排序的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54836757/

相关文章:

python - 以numpy/Python的风格访问OpenCV和C++中的矩阵元素

python - 如何查找重叠 numpy 数组的索引和最大值

python - 如何检查 python 列表/字典中是否存在第二层(嵌套)键?

java - Java中哪种方法适合这种场景?

C++多线程指针指向指针

python 在磁盘上存储实时变量

python - 如何使用 PSF 内核(图像格式)从清晰图像创建合成模糊图像

具有多级模块的 Python console_scripts

python - 如何在正则表达式搜索中排除模式字符串

python - all( generator ) 在应该返回 False 时返回 True