针对numpy中经常看到axis这个参数。这里对axis这个参数的学习做个记录。
本文章以numpy.mean()函数为例
一、numpy.mean()不带任何参数的时候
不带任何参数的时候是对所有元素求平均。
例如
x = np.array([[[2,3,4],[4,5,6],[7,8,9],[10,11,12]],[[1,2,3],[3,4,5],[1,2,3],[3,4,5]]])
print(x.shape)
print(np.mean(x))
输出:(2, 4, 3)
4.875
二、numpy.mean()带axis参数的时候。
通常情况下,看到别人的文章都说axis=0 是对列操作,axis=1是对行操作。有时候很让人费解,因为如果是多维度的情况下该如何理解这个axis呢?
三、了解shape的几何意义和代数意义
假如数据显示如上图所示,
首先要理解shape的三个数字分别代表什么(2,4,3)
几何意义:但是第一个是2代表两个红色框,
第二个是4代表两个蓝色框,(行数)
第三个是3代表两个紫色框。 (列数)
代数意义:第一个2的确立是将原数据去掉最外层的中括号,然后逗号分隔的数量就可以确立shape中的第一个数字,
x = np.array([[[2,3,4],[4,5,6],[7,8,9],[10,11,12]],[[1,2,3],[3,4,5],[1,2,3],[3,4,5]]])
去掉最外面一个括号之后,逗号分割为红色两个部分。
因为ndarray是矩阵,所以红蓝两部分的shape完全相同。所以下一步确立第二个数字的时候我们只看红色部分
左边红色框内的去掉最外层中括号然后逗号分隔,分割为蓝色的4个部分,所以第二个数字确立为4
相同的原理,第二个数字将2,3,4分割为3个部分,所以shape的第三个数字是3
四、axis=0的时候。
是针对红色框的相同位置进行做某种运算,例如常见的是求和,求最小值,求平均值。
axis=0的操作的结果的shape是(4,3)
axis=0 就是两个红色框对应位置的算术运算(求和,求最小值,求最大值,求平均数等等)
元数据的shape(2,4,3) 最前面的2消失了。(axis等于几,元数据的shape中第几个维度就消失)
五、axis=1的时候。
axis=0的时候非常好理解,也非常直观。
axis=1的时候。我们首先确定shape,结果的shape是(2,3),即通常说的2行3列
2行的结果,肯定是从2个红色框分别得出的结果,
2,4,5,10经过某种运算得出第一行第一列的结果,
3,4,8,11得出第一行第二列的结果。
4,6,9,12得出第一行第三列的结果。
将axis与shape的顺序结合起来理解。还是很好理解的。
六、那么axis=3的时候。
我们知道结果的shape是(2,4)
那么你知道这个结果是怎么的出来的吗?