转载https://zhuanlan.zhihu.com/p/35704955
numpy数组中的轴不太容易理解,但是却非常重要。官方定义为:轴即维度(In Numpy dimensions are called axes.)。
对于二维数组,0轴即代表数组的行,1轴代表数组的列,对二维数组:
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> arr1
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
复制代码
其轴0、1如下图所示:
>>> arr1.sum(axis=0)
array([12, 15, 18])
>>> arr1.sum(axis=1)
array([ 6, 15, 24])
复制代码
对于三位数组
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
复制代码
数组arr
有3条轴,编号分别为0、1、2,要直接看出来这三条轴分别对应什么方向有点困难。最好的办法就是先将三维数组降维成一个二维数组,这样就可以获得原数组的0轴、1轴。怎么降呢?把最内层数组作为一个整体来看待,即有:
A = [0, 1, 2, 3]
B = [4, 5, 6, 7]
C = [ 8, 9, 10, 11]
D = [12, 13, 14, 15]
arr = [[A, B],
[C, D]]
>>> arr.sum(axis=0)
array([[ 8, 10, 12, 14],
[16, 18, 20, 22]])
# arr.sum(axis=1) = [A + B, C + D]
>>> arr.sum(axis=1)
array([[ 4, 6, 8, 10],
[20, 22, 24, 26]])
arr.sum(axis=2)
array([[ 6, 22],
[38, 54]])
复制代码
如果一个多维数组的 shape 是 (a1, a2, a3, a4), 那么延轴0计算最后的数组shape 是 (a2, a3, a4), 延轴1计算最后的数组shape是 (a1, a3, a4)
对于多维数组,numpy对轴的编号是先行后列,由外向内!最外面的括号代表着 axis=0,依次往里的括号对应的 axis 的计数就依次加 1,所以,第三个轴(轴2)即为最内层数组的行方向
np.sum 这种函数中的参数 keepdims,它的默认值是 False,此时它会把多余的括号给删掉。假如我们把它设为 True 的话,表示保持原来的维度.
下面是参考文献2中同学整理的图。
参考
https://flat2010.github.io/2017/05/31/Numpy数组解惑/flat2010.github.io Numpy数组解惑 | 断鸿声里,立尽斜阳 Numpy数组解惑 | 断鸿声里,立尽斜阳flat2010.github.io 射命丸咲:Python · numpy · axiszhuanlan.zhihu.com