python - 为什么 3d 数组的打印结果与 python 中相同的心理可视化不同?

标签 python arrays numpy multidimensional-array reshape

我正在学习机器学习,但没有太多编码经验。在尝试理解 3d 数组时,我被指示将 2x4x3 数组可视化为: 2x4x3

但是当我使用以下方法创建具有相同形状的随机数组时:

X = np.random.randint(10, size=(2, 4, 3))
print(X)

输出是

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

 [[7 8 2]
  [9 1 2]
  [2 0 1]
  [8 0 9]]]

这对我来说看起来像 4x3x2。

我是否将 2x4x3 理解为上面给出的图像?为什么 python 会像这样打印 3d 数组?最后,如果我的想象是正确的,生成的随机值在图像中是如何排列的?

最佳答案

MATLAB/Octave 确实将此 3 维数组显示为 3 个 (2,4) 矩阵 block

>> reshape(1:24,2, 4, 3)
ans =

ans(:,:,1) =

   1   3   5   7
   2   4   6   8

ans(:,:,2) =

    9   11   13   15
   10   12   14   16

ans(:,:,3) =

   17   19   21   23
   18   20   22   24

但这里尾随维度是最外层的。这称为列主要或 Fortran 约定。请注意值是如何增加的,沿着列向下。

但在 numpy 中,主要维度是最外层的。值跨行增加。这是行优先或 C 排序

In [22]: np.arange(1,25).reshape(2,4,3)                                         
Out[22]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9],
        [10, 11, 12]],

       [[13, 14, 15],
        [16, 17, 18],
        [19, 20, 21],
        [22, 23, 24]]])

此维度排序与等效列表中的嵌套相匹配:

In [24]: np.arange(1,25).reshape(2,4,3).tolist()                                
Out[24]: 
[[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],
 [[13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24]]]

维度的含义来自应用程序和用户,而不是来自 Python/numpy。图像通常是(高度、宽度、 channel )。在计算上,将一个像素的 channel 的 3(或 4)个元素保持在一起可能很方便,也就是说,使其成为最后一个维度。因此,您的 (2,4,3) 可以被认为是具有 3 种颜色 (rgb) 的 (2,4) 图像。普通的 numpy 打印不是可视化的最佳选择。

但是如果图像是 (400, 600, 3) 形状,我们不需要数组的“打印”。我们想要一个绘图或图像显示,一张图片,将最后一个维度呈现为颜色。

关于python - 为什么 3d 数组的打印结果与 python 中相同的心理可视化不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58354395/

相关文章:

python - 如何指定要在 x Axis 上绘制的离散值(matplotlib、箱线图)?

python - 我们可以在pandas中的explode()的替代选项中使用什么?

python - 在 Celery Task Queue 中,在一个组中运行的任务与循环中的多个异步任务有什么不同吗?

php - 向/从二维数组添加/获取数据不起作用

arrays - Cocoa 中的循环链表

python - 为什么我得到 "ufunc ' multiply' did not contain a loop with signature matching types dtype ('S32' ) dtype ('S32' ) dtype ('S32' )"with values from raw_input

Python 查找子数组的索引,这些索引是连续的并且以 1 的差递增

python - 从 sklearn 中的 Pipeline 对象返回系数

javascript - 将 php 数组从 php 文件引入 js 文件中的 javascript 数组

Python 图像与 numpy 切片的卷积在某些图像上产生奇怪的结果