• NumPy学习笔记(六)——sum()函数


    一、前言

    在元素(数组)累加的时候,可以使用此函数进行累加,非常方便

    二、函数讲解

    1、sum()函数

    我们先来看一下全部的参数

    sum(a, axis, dtype, out, keepdims, initial, where)

    2、参数讲解

    1)a

    第一个参数是是传入/输入的数组元素

    2)aixs(可选)

    沿轴使用(可选填,默认为数组的展平成一维形式,即0,1,2,3,4…等)

    1. 如果是沿着0轴,则返回每一最大值的索引
    2. 如果是沿着1轴,则返回每一最大值的索引
    3. 如果axis为负数,则从最后一个轴到第一个轴进行相加
    4. 如果默认为None,则把输入的所有元素都加起来

    aixs为0与1时的方向如图所示

    在这里插入图片描述

    上个代码小例子

    import numpy as np
    
    
    a = np.array([[1,2],
    			  [3,4]])
    
    b = np.sum(a,axis=0)
    # 按列相加
    ## [4 6]
    
    c = np.sum(a,axis=1)
    # 按行相加
    ## [3 7]
    
    d = np.sum(a)
    # 默认把四个元素都加起来
    ## 10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3)dtype(可选)

    默认为:numpy.float64

    我们也可以进行修改

    比如我们常用的dtype = numpy.int32

    具体使用整数类型或者精度要根据情况来选择

    比如有关年龄数据可以考虑都用int

    有关购物消费数据可以考虑使用float

    4)out(可选)

    数组类型

    这个参数比较难理解

    英语比较好的读者可以先看原版开发手册,吃力的同学直接跳过

    在这里插入图片描述
    ---------------------------------------分割线------------------------------------------------------------

    我的理解:

    就是调用N次sum函数,会创建N次数组(大小与输入a相同)进行输出结果

    这样的做法缺点很明显:消耗大量内存。

    那么开发者就定义了out参数,把你所有计算结果都写入out中

    第二次调用sum函数,得到的结果会覆盖上一轮的out值

    怕读者不是很理解来段代码就懂了

    import numpy as np
    
    a = np.array([[1,2],
    			  [3,4]])
    
    # out的形状要比a的形状要大
    ao = np.zeros_like([2,2])
    print(ao)
    ## a0=[0 0]
    
    b = np.sum(a,axis=0,out=ao)
    print(ao)
    ## ao=[4 6]
    
    c = np.sum(a,axis=1,out=ao)
    print(ao)
    ## ao=[3 7]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    5)keepdims(可选)

    布尔类型

    简而言之就是

    如果设置为True值,则缩小轴的尺寸保留为1,保存在维数中(结果为)

    如果设置为False值,则不会保留这个1

    直接上代码更好理解

    import numpy as np
    x = np.ones([2,8])
    
    y = np.sum(x,axis=0,keepdims=True).shape
    ## 保持原有二维的形状(1, 8)
    
    z = np.sum(x,axis=0,keepdims=False).shape
    ## 没有保持原先二维形状(8,)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6)initial(可选)

    是个标量

    会把这个标量也加入到累加结果中,相当于加了个bias(偏置)

    
    
    z = np.sum(3,axis=0,initial=4)
    ## 7(3+4)
    
    z = np.sum([1,2],initial=4)
    ## 7
    
    z = np.sum([[1,2],[3,4]],axis=1,initial=4)
    ## [(1+2+4),(3+4+4)]
    ## [7,11]
    
    
    z = np.sum([[1,2],[3,4]],axis=0,initial=4)
    ## [(1+3+4),(2+4+4)]
    ## [8,10]
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    7)where(可选)

    布尔类型

    如果为True值,则会正常的进行sum运算

    如果非False值,则不会进行sum运算,从而赋值为0

    print(np.sum([[0, 1], [np.nan, 5]], where=True, axis=1))
    ## [ 1. nan]
    
    print(np.sum([[0, 1], [np.nan, 5]], where=True, axis=0))
    ## [nan  6.]
    
    print(np.sum([[0, 1], [np.nan, 5]], where=False, axis=1))
    ## [0. 0.]
    
    print(np.sum([[0, 1], [np.nan, 5]], where=False, axis=0))
    ## [0. 0.]
    
    print(np.sum([[0, 1], [1, 5]], where=False, axis=1))
    ## [0 0]
    
    print(np.sum([[0, 1], [1, 5]], where=False, axis=0))
    ## [0 0]
    
    print(np.sum([[0, 1], [1, 5]], where=[True,False], axis=0))
    ## [1 0]
    
    print(np.sum([[0, 1], [1, 5]], where=[False,True], axis=0))
    ## [0 6]
    
    print(np.sum([[0, 1], [1, 5]], where=[True,False], axis=1))
    ## [0 1]
    
    print(np.sum([[0, 1], [1, 5]], where=[False,True], axis=1))
    ## [1 5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3、返回值

    如果不设定axis的值,将会返回一个标量

    如果axis=0/1,则返回与a相同形状的数组(具体看沿哪个轴相加)

    注意

    如果多次调用该函数,还是建议加上out参数,这样可以节省大量内存!!!!

  • 相关阅读:
    golang设计模式——职责链模式
    Ubuntu18.04 redis 哨兵模式搭建的步骤
    广东2022年下半年系统集成项目管理工程师上午真题及答案解析
    clamav杀毒
    C语言中柔性数组的讲解与柔性数组的优势
    okcc呼叫中心自动外呼坐席接听电话为什么不均匀?
    力扣刷题-哈希表两数之和
    SAPRouter Certificate即将过期更新证书
    java运算符
    技术管理进阶——为什么Leader的话有时候你听不懂
  • 原文地址:https://blog.csdn.net/weixin_41377182/article/details/125399751