为什么按原样打印3D numpy数组?

时间:2019-02-22 23:50:57

标签: python multidimensional-array numpy-ndarray

我正在尝试将头部包裹在3D阵列(或通常为多维阵列)周围,但是这让我有些不解。特别是3D numpy数组的打印方式对我来说是违反直觉的。这个问题是similar,但更多地是关于编程语言之间的差异,我仍然没有完全理解它。让我尝试解释一下。

说我想创建一个3行(长度),5列(宽度)和2深度的3D数组。因此是3x5x2的矩阵。

我执行以下操作:

(u'tomorrow', 20, 28, u'DATE')
(u'France', 32, 38, u'GPE')`

对我来说,打印此内容的逻辑方法是这样的:

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

对于我来说,为什么以这种方式打印数组并不明显。也许只是我(也许这里缺少我的空间推理),还是有特定的原因为什么会这样打印NumPy数组?

1 个答案:

答案 0 :(得分:0)

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

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