python之np.sum()用法详解

Posted luffy5459

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之np.sum()用法详解相关的知识,希望对你有一定的参考价值。

    python库numpy提供的求和方法np.sum(),可以对数组和矩阵进行求和。sum方法可以接收多个参数,主要是数组a,坐标轴axis,数据类型dtype,初始值initial。其中,axis对于我们来说比较容易迷糊,这个值对求和有什么影响?一般来说,不设置axis这个参数,那么就是把数组或者矩阵所有元素求和,不管数组是一维,还是多维,最终会把每一个元素相加求和。

     如下数组,是一个2维数组,每一维又是一个3*4的二维数组。   

[[
 [1,2,3,1],
 [2,3,4,1],
 [3,4,1,2]
],[
 [1,0,2,0],
 [0,1,0,2],
 [3,2,1,0]
]]

这里可以看作是一个x,y,z三个维度的数组。axis=0,1,2,可以分别表示按照x,y,z轴来定位并计算他们的和。

axis=0   x = 0,1

表达式 a[0][y][z]+a[1][y][z]

求和结果 [3*4]

a[0][y0][z0]+a[1][y0][z0] a[0][y0][z1]+a[1][y0][z1] a[0][y0][z2]+a[1][y0][z2] a[0][y0][z3]+a[1][y0][z3]  
  = 1 + 1 = 2                    = 2 + 0 = 2                     = 3 + 2 = 5                       = 1 + 0 = 1   
a[0][y1][z0]+a[1][y1][z0] a[0][y1][z1]+a[1][y1][z1] a[0][y1][z2]+a[1][y1][z2] a[0][y1][z3]+a[1][y1][z3] 
  = 2 + 0 = 2                     = 3 + 1 = 4                    = 4 + 0 = 4                       = 1 + 2 = 3   
a[0][y2][z0]+a[1][y2][z0] a[0][y2][z1]+a[1][y2][z1] a[0][y2][z2]+a[1][y2][z2] a[0][y2][z3]+a[1][y2][z3]
  = 3 + 3 = 6                      = 4 + 2 = 6                    = 1 + 1 = 2                      = 2 + 0 = 2
  
 [[2,2,5,1],
  [2,4,4,3],
  [6,6,2,2]]
  
axis=1   y = 0,1,2

表达式 a[x][0][z]+a[x][1][z]+a[x][2][z]

求和结果 [2*4]

a[x0][0][z0]+a[x0][1][z0]+a[x0][2][z0]  a[x0][0][z1]+a[x0][1][z1]+a[x0][2][z1]  a[x0][0][z2]+a[x0][1][z2]+a[x0][2][z2]  a[x0][0][z3]+a[x0][1][z3]+a[x0][2][z3]
    = 1 + 2 + 3 = 6                        = 2 + 3 + 4 = 9                         = 3 + 4 + 1 = 8                        = 1 + 1 + 2 = 4
a[x1][0][z0]+a[x1][1][z0]+a[x1][2][z0]  a[x1][0][z1]+a[x1][1][z1]+a[x1][2][z1]  a[x1][0][z2]+a[x1][1][z2]+a[x1][2][z2]  a[x1][0][z3]+a[x1][1][z3]+a[x1][2][z3]  
   = 1 + 0 + 3 = 4                          = 0 + 1 + 2 = 3                        = 2 + 0 + 1 = 3                        = 0 + 2 + 0 = 2
   
   [[6,9,8,4],
    [4,3,3,2]]
    
axis=2   z = 0,1,2,3

      
表达式 a[x][y][0]+a[x][y][1]+a[x][y][2]+a[x][y][3]

求和结果 [2*3]    
a[x0][y0][0]+a[x0][y0][1]+a[x0][y0][2]+a[x0][y0][3] a[x0][y1][0]+a[x0][y1][1]+a[x0][y1][2]+a[x0][y1][3] a[x0][y2][0]+a[x0][y2][1]+a[x0][y2][2]+a[x0][y2][3]        
   = 1 + 2 + 3 + 1 = 7                                 = 2 + 3 + 4 + 1 = 10                                = 3 + 4 + 1 + 2  = 10   
a[x1][y0][0]+a[x1][y0][1]+a[x1][y0][2]+a[x1][y0][3] a[x1][y1][0]+a[x1][y1][1]+a[x1][y1][2]+a[x1][y1][3] a[x1][y2][0]+a[x1][y2][1]+a[x1][y2][2]+a[x1][y2][3]
   = 1 + 0 + 2 + 0 = 3                                 = 0 + 1 + 0 + 2 = 3                                 = 3 + 2 + 1 + 0 = 6
  
  [[7,10,10],
   [3,3,6]]

   以上结果可以通过python代码来验证:

    如下数组:[[0,1],[0,5]]是一个二维数组,直接求和结果就是6。

    这里,因为是一个二维数组,所以axis可以取值0、1。

    通过程序验证一下:

对于这个二维数组求和,可以也可以这么理解它,当axis=0时,求和就是数组投影到x轴的结果。当axis=1时,求和就是数组投影到y轴的结果。

 

    以上的过程演示的其实是np.sum()官方给出的示例:

 

    这里主要介绍了axis取值对求和结果的影响,axis其实可以看做是一个x,y,z轴的一个索引,索引可以从0开始,到size-1。也可以从-1开始,就是取负值,我们可以利用上面的第二个示例来作验证:

     这个结果与上面求和计算axis=1是一样的。

    官方文档里面有这样一句话:

If axis is negative it counts from the last to the first axis.

    简单翻译一下就是如果axis是负值,那么就从最后一个坐标轴往第一个坐标轴开始算起。 

    ===================

    np.sum()求和还有一些参数,比如dtype,这个比较有意思,比如我们给出的数组元素都是浮点数,但是最后这里设置dtype=np.int32,最终计算求和,是按照整数来计算:

    还有一个initial参数很容易理解,就是设置求和初始值,一般默认是0,这里可以设置一个初始值:

    np.sum求和,难以理解的地方在于axis取值,以及取值之后求和该如何计算。axis确定之后,它的取值范围决定了求和计算的数字由多少个组成,最后生成的结果数组由余下的 维度 乘积 决定。

以上是关于python之np.sum()用法详解的主要内容,如果未能解决你的问题,请参考以下文章

python - 日志中遇到无效值

Vue中watch用法详解

python字典之defaultdict详解

python之re正则表达式用法详解

python开发笔记之zip()函数用法详解

Javascript中内建函数reduce的应用详解