Numpy中的(axis=?)助解

在阅读开源项目代码时,总是被numpy中的(axis=?)搞得懵逼,特别是维度较高的时候。近期读了几篇博客终于给笔者整明白了。

下面通过示例说明numpy中axis的使用。首先对numpy中axis取值进行说明:一维数组时axis=0,二维数组时axis=0,1,维数越高,则axis可取的值越大,数组n维时,axis=0,1,…,n。为了方便下面的理解,我们这样看待:在numpy中数组都有着[ ]标记,则axis=0对应着最外层的[ ],axis=1对应第二外层的[ ],以此类推,axis=n对应第n外层的[ ]。【0,1,2,3,...是从外开始剥,-n,-n+1,...,-3,-2,-1是从里开始剥】做完运算后要移除对应层的[ ]。

(1)axis = 0表示对最外层[ ]里的最大单位块  做块与块之间的运算,计算完之后移除最外层[ ]:

因为只有一层[ ],所以直接对这一层里的最大单位块1,2,3做运算;做完加法后本应是[6],但是移除最外层[ ]后,最终结果返回的是6。

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

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


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

 因为只有一层[ ],找不到第二外层,所以报错。

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

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

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


有三层[ ],第三外层[ ]里的最大单位块有四组(因为有四个第三外层[ ]),第一组是1, 2,第二组是3,4,第三组是11,12,第四组是13,14,第一组1+2=3,第二组3+4=7,第三组11+12=23,第四组13+14=27.
做完加法后本应是[[[3],[7]], [[23], [27]]],但是移除第三外层[ ]后,原来的三层[ ]变成两层[ ],所以返回结果为[[ 3, 7], [23, 27]]。

 axis = 3,4,5类似。

 上面的?略有疑惑,不够目前还没有见过有人代码用负数,影响不大。

参考:Python之NumPy(axis=0/1/2...)的透彻理解——通过np.sum(axis=?)实例进行说明_sky_kkk的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值