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

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]

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,)

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]


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]

3、返回值

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

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

注意

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

猜你喜欢

转载自blog.csdn.net/weixin_41377182/article/details/125399751
今日推荐