【问题标题】:Very Basic Numpy array dimension visualization非常基本的 Numpy 数组维度可视化
【发布时间】:2018-06-20 10:04:14
【问题描述】:

我是 numpy 的初学者,没有矩阵方面的经验。我了解基本的 1d 和 2d 数组,但在可视化 3d numpy 数组时遇到了麻烦,如下所示。以下 python 列表如何形成具有高度、长度和宽度的 3d 数组?哪些是行和列?

b = np.array([[[1, 2, 3],[4, 5, 6]],
          [[7, 8, 9],[10, 11, 12]]])

【问题讨论】:

  • 一旦进入 3D,行和列的概念就没有多大意义了。您可以参考这个答案来建立更高维数组的直觉。 stackoverflow.com/questions/22320534/…
  • 感谢您的参考。我理解了 numpy 中轴的概念。但是在上面的 3d 数组中,为什么数组由两个列表组成,每个列表又由两个列表组成?那如何代表 3d?
  • 我将 3d 想象为平面或纸叠在一起。或 3d 棋盘或 Qubic 3d tictactoe(1960 年代复古游戏)。但是我使用多维数组的时间已经足够长,以至于我不会尝试将它们可视化。他们是他们自己的“现实”。

标签: python arrays numpy matrix multidimensional-array


【解决方案1】:

NumPy 中ndarray 的解剖结构如下图所示:(来源:Physics Dept, Cornell Uni


一旦您离开 2D 空间并进入 3D 或更高维空间,行和列的概念就不再有意义了。但是您仍然可以直观地理解 3D 数组。例如,考虑您的示例:

In [41]: b
Out[41]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

In [42]: b.shape
Out[42]: (2, 2, 3)

这里b 的形状是(2, 2, 3)。你可以这样想,我们有 两个 (2x3) 矩阵堆叠形成一个 3D 数组。要访问第一个矩阵,您可以像 b[0] 一样对数组 b 进行索引,要访问第二个矩阵,您可以像 b[1] 一样对数组 b 进行索引。

# gives you the 2D array (i.e. matrix) at position `0`
In [43]: b[0]
Out[43]: 
array([[1, 2, 3],
       [4, 5, 6]])


# gives you the 2D array (i.e. matrix) at position 1
In [44]: b[1]
Out[44]: 
array([[ 7,  8,  9],
       [10, 11, 12]])

但是,如果您进入 4D 或更高的空间,则很难从阵列本身中理解任何意义,因为我们人类很难可视化 4D 和更多维度。因此,人们宁愿只考虑 ndarray.shape 属性并使用它。


更多关于我们如何使用(嵌套)列表构建高维数组的信息:

对于一维数组,数组构造函数需要一个序列(tuple, list 等),但通常使用list

In [51]: oneD = np.array([1, 2, 3,])    
In [52]: oneD.shape
Out[52]: (3,)

对于二维数组,它是list of lists,但也可以是tuple of liststuple of tuples 等:

In [53]: twoD = np.array([[1, 2, 3], [4, 5, 6]])
In [54]: twoD.shape
Out[54]: (2, 3)

对于 3D 数组,它是 list of lists of lists

In [55]: threeD = np.array([[[1, 2, 3], [2, 3, 4]], [[5, 6, 7], [6, 7, 8]]])

In [56]: threeD.shape
Out[56]: (2, 2, 3)

P.S. 在内部,ndarray 存储在一个内存块中,如下图所示。 (来源:思考

【讨论】:

  • @VaishnavMK 我添加了一些关于我们如何使用嵌套列表构建数组的信息。
  • 不断增加的嵌套逻辑清除了很多东西。我主要混淆了数组(空间)的维度和矩阵的维度。傻。
  • 非常可爱的图形(和很好的解释)!当我 manually wrote an ascii diagram 解释它时,我会跳动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多