Python之NumPy,axis=0/1/2...的透彻理解

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

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

123

因为只有一层[],所以直接对这一层里的最大单位快1,2,3做运算;

做完加法后本应是[6],但是移除最外层[]后,[]不存在了,所以返回的是6。

a= np.array([[1,2],[3,4]])

a.sum(axis = 0)

>>>array([4, 6])

123

有两层[],最外层[]里的最大单位块分别为[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]])

123

有三层[],最外层[]里的最大单位块分别为[[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

123

因为只有一层[],axis取值只有一个,为0.

a= np.array([[1,2],[3,4]])

a.sum(axis = 1)

>>>array([3, 7])

123

有两层[],第二外层[]里的最大单位块有两组(因为有两个第二外层[]),第一组是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 = 1)

>>>array([[ 4, 6], [24, 26]])

123

有三层[],第二外层[]里的最大单位块有两组(因为有两个第二外层[]),第一组是[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的运算了!