Python笔记 如何理解Numpy数组中的axis?
博主对axis的理解可能也不够深入,暂时只是一些实践后的简单总结,如果有描述错误,也请指正!
下面就简单讲讲我的思路吧
首先,我并不打算很执着地像大部分朋友一样非常强烈地想要搞清楚axis=0或axis=1与横、纵坐标的直接关系,因为我觉得这样的理解在数组维度较低的时候还可以适用,但是数组维度一高,就又会有经常混淆的情况出现。
我的想法还是更倾向于数形结合去理解
首先,axis的可能取值显然与数组的维度相关[0,dimmax−1][0, dim_{max} - 1][0,dimmax−1],我们下面就分别用一、二、三维度的数组来举例说明,帮助理解。
- 一维:
import numpy as np
x = np.array([1, 2, 3])
print(x.sum(0))
>>>6
一维的数组axis的取值显然只可能是0,代表的维度也不用多讲,易得 sum=6sum = 6sum=6
- 二维:
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(x.sum(0))
print(x.sum(1))
>>>[12 15 18]
>>>[6 15 24]
二维的数组axis的取值可能为0或1
x.sum(0)=[12 15 18]x.sum(0) = [12\ 15\ 18]x.sum(0)=[12 15 18],其中 12=1+4+7;15=2+5+8;18=3+6+912 = 1 + 4 + 7;15 = 2 + 5 + 8;18 = 3 + 6 + 912=1+4+7;15=2+5+8;18=3+6+9。
x.sum(1)=[6 15 24]x.sum(1) = [6\ 15\ 24]x.sum(1)=[6 15 24],其中 6=1+2+3;15=4+5+6;24=7+8+96 = 1 + 2 + 3;15 = 4 + 5 + 6;24 = 7 + 8 + 96=1+2+3;15=4+5+6;24=7+8+9。

我们将这张图片与上面的两条式子对照一下,我们可以发现x.sum(0)x.sum(0)x.sum(0)计算的是每一行的sumsumsum,而x.sum(1)x.sum(1)x.sum(1)计算的是每一列的sumsumsum。
我们还可以从另一个所谓“内层与外层”的角度看待这个问题,通过观察本例中数组的初始化语句x=np.array([[1,2,3],[4,5,6],[7,8,9]])x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])x=np.array([[1,2,3],[4,5,6],[7,8,9]])可以发现符号"[ ]"存在一个内层外层的关系,所以其实我们可以把 axis=?axis = ?axis=? 理解为内层或者外层的概念。
当 axis=0axis = 0axis=0 时,x.sum(0)=[12 15 18]x.sum(0) = [12\ 15\ 18]x.sum(0)=[12 15 18],相当于是把数组的外层[1,2,3],[4,5,6],[7,8,9][1, 2, 3], [4, 5, 6], [7, 8, 9][1,2,3],[4,5,6],[7,8,9]进行相加得到[12 15 18][12\ 15\ 18][12 15 18](位级相加)。
当 axis=1axis = 1axis=1 时,x.sum(1)=[6 15 24]x.sum(1) = [6\ 15\ 24]x.sum(1)=[6 15 24],相当于是把数组的内层分别相加,[1,2,3][1, 2, 3][1,2,3]相加得到666, [4,5,6[4, 5, 6[4,5,6]相加得到151515,[7,8,9][7, 8, 9][7,8,9]相加得到242424,最终得到[6 15 24][6\ 15\ 24][6 15 24]。
所谓的内层、外层其实就是一层层的把最外层的[ ]符号给拆掉得到的,[[1,2,3],[4,5,6],[7,8,9]][[1, 2, 3], [4, 5, 6], [7, 8, 9]][[1,2,3],[4,5,6],[7,8,9]])拆掉最外层的[ ]得到[1,2,3],[4,5,6],[7,8,9][1, 2, 3], [4, 5, 6], [7, 8, 9][1,2,3],[4,5,6],[7,8,9],把[1,2,3],[4,5,6],[7,8,9][1, 2, 3], [4, 5, 6], [7, 8, 9][1,2,3],[4,5,6],[7,8,9]的[ ]拆掉,分别得到三组数字1 2 31\ 2\ 31 2 3、4 5 64\ 5\ 64 5 6、7 8 97\ 8\ 97 8 9
- 三维:
import numpy as np
x = np.array([[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]]])
print(x.sum(0))
print(x.sum(1))
print(x.sum(2))
>>>[[12 15 18]]
>>>[[1 2 3]
[4 5 6]
[7 8 9]]
>>>[[ 6]
[15]
[24]]
我们同样是从两个角度来看
首先,数形结合

我们可以发现x.sum(0)x.sum(0)x.sum(0)计算的是沿着x轴方向的sumsumsum,x.sum(1)x.sum(1)x.sum(1)计算的是沿着y轴方向的sumsumsum,x.sum(2)x.sum(2)x.sum(2)计算的是沿着z轴方向的sumsumsum
然后,从“内层与外层”的角度看待这个问题x=np.array([[[1,2,3]],[[4,5,6]],[[7,8,9]]])x = np.array([[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]]])x=np.array([[[1,2,3]],[[4,5,6]],[[7,8,9]]])
当 axis=0axis = 0axis=0 时,x.sum(0)=[[12 15 18]]x.sum(0) = [[12\ 15\ 18]]x.sum(0)=[[12 15 18]],相当于是把数组的外层[[1,2,3]],[[4,5,6]],[[7,8,9]][[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]][[1,2,3]],[[4,5,6]],[[7,8,9]]进行相加得到[[12 15 18]][[12\ 15\ 18]][[12 15 18]]。
当 axis=1axis = 1axis=1 时,x.sum(1)=[[123][456][789]]x.sum(1) = [[1 2 3][4 5 6][7 8 9]]x.sum(1)=[[123][456][789]],相当于是把数组的次外层[1,2,3],[4,5,6],[7,8,9][1, 2, 3], [4, 5, 6], [7, 8, 9][1,2,3],[4,5,6],[7,8,9]进行拼接(是拼接而不是相加,是因为它们原本不存在于同一个[ ]中,在二维的例子中是数值相加是因为它们原本是从同一个[ ]中拆分出来的),得到[[123][456][789]][[1 2 3][4 5 6][7 8 9]][[123][456][789]]。
当 axis=2axis = 2axis=2 时,x.sum(2)=[[6][15][24]]x.sum(2) = [[ 6][15][24]]x.sum(2)=[[6][15][24]],相当于是把数组的内层1,2,31, 2, 31,2,3、4,5,64, 5, 64,5,6、7,8,97, 8, 97,8,9 进行分别相加得到[[6][15][24]][[ 6][15][24]][[6][15][24]]。

被折叠的 条评论
为什么被折叠?



