Python中axis=0/1问题的解析

转自https://blog.csdn.net/sky_kkk/article/details/79725646

前言
在numpy的使用中,对axis的使用总是会产生疑问,如np.sum函数,在多维情况下,axis不同的取值应该做怎样的运算呢?返回的是什么形状的数组呢?在网上查了很多资料,总是似懂非懂,查阅了官方文件,以及多次试验后,我总结出一种能深入透彻理解axis用法的说明,配合着np.sum例子。希望大家再也不会对axis的使用产生困惑,即使在高维情况下也信手拈来。

numpy中axis取值的说明
首先对numpy中axis取值进行说明:一维数组时axis=0,二维数组时axis=0,1,维数越高,则axis可取的值越大,数组n维时,axis=0,1,…,n。为了方便下面的理解,我们这样看待:在numpy中数组都有着[]标记,则axis=0对应着最外层的[],axis=1对应第二外层的[],以此类推,axis=n对应第n外层的[]。 
下面开始从axis=0,axis=1这两个例子开始,深入透彻的理解numpy中axis的用法。

axis = 0表示对最外层[]里的最大单位块做块与块之间的运算,同时移除最外层[]:

a= np.array([1,2,3])    
a.sum(axis = 0)
>>>6
1
2
3
因为只有一层[],所以直接对这一层里的最大单位快1,2,3做运算; 
做完加法后本应是[6],但是移除最外层[]后,[]不存在了,所以返回的是6。

a= np.array([[1,2],[3,4]])  
a.sum(axis = 0)
>>>array([4, 6])
1
2
3
有两层[],最外层[]里的最大单位块分别为[1,2],[3,4],对这两个单位块做块与块之间的运算,[1,2]+[3,4] = [4, 6]; 
做完加法后本应是[[4, 6]],但是移除最外层[]后,原来的两层[]变成一层[],所以返回结果为 [4, 6]。

np.array([[[1,2],[3,4]],[[11,12],[13,14]]])
a.sum(axis = 0)
>>>array([[12, 14], [16, 18]])
1
2
3
有三层[],最外层[]里的最大单位块分别为[[1,2],[3,4]],[[11,12],[13,14]],对这两个单位块做块与块之间的运算,[[1,2],[3,4]] + [[11,12],[13,14]] = [[12, 14], [16, 18]]; 
做完加法后本应是[[[12, 14], [16, 18]]],但是移除最外层[]后,原来的三层[]变成两层[],所以返回结果为[[12, 14], [16, 18]];

axis= 1表示对第二外层[]里的最大单位块做块与块之间的运算,同时移除第二外层[]:

a= np.array([1,2,3])    
a.sum(axis = 1)
>>>ValueError: 'axis' entry is out of bounds
1
2
3
因为只有一层[],axis取值只有一个,为0.

a= np.array([[1,2],[3,4]])  
a.sum(axis = 1)
>>>array([3, 7])
1
2
3
有两层[],第二外层[]里的最大单位块有两组(因为有两个第二外层[]),第一组是1,2,第二组是3,4,分别对这两个单位块做块与块之间的运算,第一组结果为1+2=3,第二组结果为3+4=7; 
做完加法后本应是[[3],[7]],但是移除第二外层[]后,原来的两层[]变成一层[],所以返回结果为[3, 7]。

np.array([[[1,2],[3,4]],[[11,12],[13,14]]])
a.sum(axis = 0)
>>>array([[ 4,  6], [24, 26]])
1
2
3
有三层[],第二外层[]里的最大单位块有两组(因为有两个第二外层[]),第一组是[1,2],[3,4],第二组是[11,12],[13,14],分别对这两个单位块做块与块之间的运算,第一组结果为[1,2]+[3,4] = [ 4, 6],第二组结果为[11,12]+[13,14] = [24, 26] 
做完加法后本应是[[[ 4, 6]], [[24, 26]]],但是移除第二外层[]后,原来的三层[]变成两层[],所以返回结果为[[ 4, 6], [24, 26]]

axis = 3,4,5也如此分析

看懂了这些说明,相信你对axis已经有了深入的理解,以后再也不用怕高维数组关于axis的运算了!
 

你可能感兴趣的:(python)