sum函数axis参数详解(转载)

     众所周知,sum不传参的时候,是所有元素的总和。这里就不说了。

1 sum函数可以传入一个axis的参数,这个参数怎么理解呢?这样理解:

假设我生成一个numpy数组a,如下


 
 
  1. >>> import numpy as np
  2. >>> a = np.array([[[ 1, 2, 3, 2],[ 1, 2, 3, 1],[ 2, 3, 4, 1]],[[ 1, 0, 2, 0],[ 2, 1, 2, 0],[ 2, 1, 1, 1]]])
  3. >>> a
  4. array([[[ 1, 2, 3, 2],
  5. [ 1, 2, 3, 1],
  6. [ 2, 3, 4, 1]],
  7. [[ 1, 0, 2, 0],
  8. [ 2, 1, 2, 0],
  9. [ 2, 1, 1, 1]]])
  10. >>>

这是一个拥有两维的数组,每一维又拥有三个数组,这个数组里面拥有四个元素。如果我们要将这个a数组中的第一个元素1定位出来,则我们会输入a[0][0][0]。好,这个axis的取值就是这个精确定位某个元素需要经过多少数组的长度,在这里是3,,所以axis的取值有0,1,2。如果一个数组精确到某个元素需要a[n0][n1][n2][...][n],则axis的取值就是n。定位 到这里,axis的参数的取值就解释完成了。

2 理解参数axis取值对sum结果的影响:

前面说了axis的取值(以数组a为例),axis=0,1,2。在这里,精确定位到某个元素可以用a[n0][n1][n2]表示。n0的取值是0,1(数组两维),代表第一个索引;n1的取值是0,1,2(每一维数组拥有3个子数组),代表第二个索引;n2的取值是0,1,2,3(每个子数组有4个元素),代表第三个索引,这几个取值在后面会用到。

        2.1 axis = 0的时候:

     axis=0,对应n0已经确定下来,即n0取值定为0,1。所以sum每个元素的求和公式是sum = a[0][n1][n2]+a[1][n1][n2]。接下来确定sum的行数和列数,n1的取值是0,1,2,为3个数,代表行数,n2的取值是0,1,2,3,为4个数,代表列数,所以sum为3*4的数组。

      如何求sum的各个元素呢,sum = a[0][n1][n2]+a[1][n1][n2]这个公式又如何理解呢?如下。我们可以做一个表格:注意颜色


                     n2=0               n2=1                n2=2                  n2=3
n1=0 a[0][0][0]+a[1][0][0]=1+1=2 a[0][0][1]+a[1][0][1]=2+0=2 a[0][0][2]+a[1][0][2]=3+2=5 a[0][0][3]+a[1][0][3]=2+0=2
n1=1 a[0][1][0]+a[1][1][0]=1+2=3 a[0][1][1]+a[1][1][1]=2+1=3 a[0][1][2]+a[1][1][2]=3+2=5 a[0][1][3]+a[1][1][3]=1+0=1
n1=2 a[0][2][0]+a[1][2][0]=2+2=4 a[0][2][1]+a[1][2][1]=3+1=4 a[0][2][2]+a[1][2][2]=4+1=5 a[0][2][3]+a[1][2][3]=1+1=2
所以sum(axis=0)的值是 [ [2, 2, 5, 2], [3, 3, 5, 1], [4, 4, 5, 2]]。

     验证一下, 正确!


 
 
  1. >>> a.sum(axis=0)
  2. array([[ 2, 2, 5, 2],
  3. [ 3, 3, 5, 1],
  4. [ 4, 4, 5, 2]])

        2.2 axis = 1的时候:

     axis=1,对应n1已经确定下来,即n1取值定为0,1,2。所以sum每个元素的求和公式是sum =a[n0][0][n2]+a[n0][1][n2]+a[n0][2][n2]。接下来确定sum的行数和列数,n0的取值是0,1,为2个数,代表行数,n2的取值是0,1,2,3,为4个数,代表列数,所以sum为2*4的数组。

      如何求sum的各个元素呢,sum = a[n0][0][n2]+a[n0][1][n2]+a[n0][2][n2]这个公式又如何理解呢?我们又做一个表格,颜色不标注了

 n2=0n2=1n2=2n2=3
n0=0a[0][0][0]+
a[0][1][0]+
a[0][2][0]
= 1+1+2=4
a[0][0][1]+
a[0][1][1]+
a[0][2][1]
=2+2+3=7
a[0][0][2]+
a[0][1][2]+
a[0][2][2]
=3+3+4=10
a[0][0][3]+
a[0][1][3]+
a[0][2][3]
=2+1+1=4
n0=1a[1][0][0]+
a[1][1][0]+
a[1][2][0]
=1+2+2=5
a[1][0][1]+
a[1][1][1]+
a[1][2][1]
=0+1+1=2
a[0][0][2]+
a[0][1][2]+
a[0][2][2]
=2+2+1=5
a[1][0][3]+
a[1][1][3]+
a[1][2][3]
=0+0+1=1
所以sum(axis=1)的值是 [ [4, 7, 10, 4], [5, 2, 5, 1]]. 验证如下,正确。

 
 
  1. >>> a.sum(axis= 1)
  2. array([[ 4, 7, 10, 4],
  3. [ 5, 2, 5, 1]])

        2.3 axis = 2的时候:

     axis=2,对应n2已经确定下来,即n2取值定为0,1,2, 3。所以sum每个元素的求和公式是sum =a[n0][n1][0]+a[n0][n1][1]+a[n0][n1][2]+a[n0][n1][3]。接下来确定sum的行数和列数,n0的取值是0,1,为2个数,代表行数,n1的取值是0,1,2,为3个数,代表列数,所以sum为2*3的数组。

      如何求sum的各个元素呢,sum = a[n0][n1][0]+a[n0][n1][1]+a[n0][n1][2]+a[n0][n1][3]这个公式又如何理解呢?我们又做一个表格,颜色不标注了

 n1=0n1=1n1=2
n0=0a[0][0][0]+
a[0][0][1]+
a[0][0][2]+
a[0][0][3]
=1+2+3+2=8
a[0][1][0]+
a[0][1][1]+
a[0][1][2]+
a[0][1][3]
=1+2+3+1=7
a[0][2][0]+
a[0][2][1]+
a[0][2][2]+
a[0][2][3]
=2+3+4+1=10
n0=1a[1][0][0]+
a[1][0][1]+
a[1][0][2]+
a[1][0][3]
=1+0+2+0=3
a[1][1][0]+
a[1][1][1]+
a[1][1][2]+
a[1][1][3]
=2+1+2+0=5
a[1][2][0]+
a[1][2][1]+
a[1][2][2]+
a[1][2][3]
=2+1+1+1=5
所以sum(axis=2)的值是 [ [8, 7, 10], [3, 5, 5]]. 验证如下,正确。


 
 
  1. >>> a.sum(axis=2)
  2. array([[ 8, 7, 10],
  3. [ 3, 5, 5]])
 好了,sum的函数解释结束。




以下补充: 当axis=-1时相当于从上例中的axis=2,即sum(a,axis=2)=sum(a,axis=-1),可以自己验证,也就是说负数在这里的意思就是从末尾开始取索引
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值