NumPy中axis的理解

文章目录

  • 前言
  • 二维数组
  • 三维数组
  • 四维数组
  • N维数组

前言

Numpy中的axis的很重要,不光np(后文numpy简称np)中的计算很重要,而且在深度学习中的张量计算也经常用到,对这np中axis等矩阵或张量的基本概念的理解很重要。

Numpy中矩阵或多维数组需要理解的概念:

  • axes np数组中的维度
  • rank np数组中axes的数量
  • axis 标识np数组中某一个维度,可以把axis当成是坐标轴
  • length 某个axis上元素的个数

NumPy’s main object is the homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type, indexed by a tuple of non-negative integers. In NumPy dimensions are called axes.

For example, the coordinates of a point in 3D space [1, 2, 1] has one axis. That axis has 3 elements in it, so we say it has a length of 3. In the example pictured below, the array has 2 axes. The first axis has a length of 2, the second axis has a length of 3.

[[1., 0., 0.],
[0., 1., 2.]]
NumPy’s array class is called ndarray. It is also known by the alias array. Note that numpy.array is not the same as the Standard Python Library class array.array, which only handles one-dimensional arrays and offers less functionality

参考:
NumPy quickstart
numpy Quickstart tutorial

二维数组

NumPy中axis的理解_第1张图片
图片来源
图片中表示的数组用np数组表示为:
NumPy中axis的理解_第2张图片

在该np数组中,

  • rank=2
  • axis的直观理解:axis=0可以认为列向量方向坐标轴,axis=1是行向量方向坐标轴
  • 数组a长度(即axis=0,行数)等于3,数组axis=1的长度等于4
  • np.sum(a, axis=0), 每行对应元素相加, 最终得到维度为1,长度为4的数组
  • np.sum(a, axis=1),每列对应元素相加,最终得到维度为1,长度为3的数组

axis进阶理解,
axis为"[ ]"的层数,最外层为axis=0,即上图红色框所内的元素;axis=1,为绿框中的元素,还包含第二行,第三行。

  • np.sum(a, axis=0)
    axis=0下所有"[ ]“对应位置相加,axis=0下所有”[ ]” 包括下三行,将这三行对应元素相加。
[ 1  2  3  4]
[ 5  6  7  8]
[ 9 10 11 12]
  • np.sum(a, axis=1)
    axis=1下所有元素相加,axis=1下的元素如下。
 1  2  3  4

shape为 c.shape

三维数组

NumPy中axis的理解_第3张图片

  • np.sum(c, axis=0) , 蓝色框中的对应元素相加,如图中两个箭头的元素相加
    NumPy中axis的理解_第4张图片
  • np.sum(c, axis=1) 图中绿色框的元素相加
    NumPy中axis的理解_第5张图片
  • np.sum(c, axis=2) 图中绿色框中元素相加
    NumPy中axis的理解_第6张图片

四维数组

NumPy中axis的理解_第7张图片

  • np.sum(c, axis=0)
    NumPy中axis的理解_第8张图片
  • np.sum(c, axis=1)
    NumPy中axis的理解_第9张图片
  • np.sum(c, axis=2)
    NumPy中axis的理解_第10张图片
  • np.sum(c, axis=3)
    NumPy中axis的理解_第11张图片

N维数组

计算规则:
axis=i (0<= i <=N-1)

  • 将axis=i “[ ]"下的同级别的”[ ]"对应元素进行计算
  • 计算出的结果的shap为原始数组的shape中删除第i个索引下的shap, del shape[i]
a=array(
[...[[...[a,b,c]...],
     [...[x,y,z]...],
     ...
     [...[1,2,3]...]
    ]
    ...
    [[...[a,b,c]...],
     [...[x,y,z]...],
     ...
     [...[1,2,3]...]
    ]
])

如上面的例子:
设中间的“[…[[…[]” 中的“…[“为axis=i,axis=i 的length为k,计算np.sum(a, axis=i):
axis=i “[ ]“下的同级别子”[ ]”(下图红框)里的对应元素进行计算, 子”[ ]"length可能大于1。最后的shape等于shape = a.shape, del shape[i]。

注意: axis=N-2,和axis=N-1的计算规则如 2为数组一致。
NumPy中axis的理解_第12张图片

你可能感兴趣的:(经验总结,NumPy)