多维NumPy数组中的轴

10

我不理解NumPy多维数组中轴的区别。你能给我解释一下吗?特别是,我想知道在NumPy三维数组中,axis0、axis1和axis2分别代表什么?为什么要这样分别呢?


我只是在这里发布这个链接,以链接这两个问题:(https://dev59.com/QGAg5IYBdhLWcg3w9e4y)。它们不同,但涉及相同的问题,阅读两者都会有助于未来的读者。 - iled
2个回答

18

最简单的方法是通过示例:

In [8]: x = np.array([[1, 2, 3], [4,5,6],[7,8,9]], np.int32)

In [9]: x
Out[9]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]], dtype=int32)

In [10]: x.sum(axis=0)  # sum the columns [1,4,7] = 12, [2,5,8] = 15 [3,6,9] = 18  
Out[10]: array([12, 15, 18])

In [11]: x.sum(axis=1)    # sum the rows [1,2,3] = 6, [4,5,6] = 15 [7,8,9] = 24
Out[11]: array([ 6, 15, 24])

轴 0,而 轴 1

在三维数组中:

In [26]: x = np.array((((1,2), (3,4) ), ((5,6),(7,8))))
In [27]: x
Out[27]: 
   array([[[1, 2],
           [3, 4]],
          [[5, 6],
           [7, 8]]])
In [28]: x.shape # dimensions of the array
Out[28]: (2, 2, 2)

In [29]: x.sum(axis=0)
Out[29]: 
array([[ 6,  8],   #  [1,5] = 6 [2,6] = 8 [3,7] = 10 [4, 8] = 12
      [10, 12]])
In [31]: x.sum(axis=1)
Out[31]: 
    array([[ 4,  6],   # [1,3] = 4 [2,4] = 6 [5, 7] = 12 [6, 8] = 14
           [12, 14]])
In [33]: x.sum(axis=2) # [1, 2] = 3 [3, 4] = 7 [5, 6] = 11 [7, 8] = 15
Out[33]: 
array([[ 3,  7],
       [11, 15]])

In [77]: x.ndim # number of dimensions of the array
Out[77]: 3

链接提供了一个有关使用多维数据数组的良好教程。


2
我可以说axis0是命令“shape”的元组的第一个元素,axis1是第二个元素,axis2是第三个元素。这正确吗? - Alex
是的,没错。这是一个222的数组。你可以使用x[0][0][1]等方式访问特定元素。 - Padraic Cunningham
"轴 0 是 _列_,而 轴 1 是 _行_。" 或者换句话说,从我理解的 numpy 轴的工作方式来看:"轴 0 是索引最大子数组的最外层轴,而 轴 n-1 是索引单个元素的最内层轴。" - Bálint Sass
或者换句话说:x.sum(axis=0)x[sum][*][*]x.sum(axis=1)x[*][sum][*]x.sum(axis=2)x[*][*][sum] - Bálint Sass

3
轴可以通过遍历 n 维数组,从数组外部到内部一直到达实际标量元素,来命名轴。 最外层的维度始终是轴 0,而最内层维度(标量元素)将是轴 n-1。 以下链接将更有用地想象和实现NumPy轴 - NumPy的transpose()方法如何排列数组的轴? 作弊代码#1:在使用带有轴参数的 NumPy sum 函数时,您指定的轴将被折叠。
作弊码#2:当我们使用 axis 参数与 np.concatenate() 函数时,axis 参数定义了我们沿其堆叠数组的轴。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接