在元素(数组)累加的时候,可以使用此函数进行累加,非常方便
我们先来看一下全部的参数
sum(a, axis, dtype, out, keepdims, initial, where)
第一个参数是是传入/输入的数组元素
沿轴使用(可选填,默认为数组的展平成一维形式,即0,1,2,3,4…等)
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
默认为:numpy.float64
我们也可以进行修改
比如我们常用的dtype = numpy.int32
具体使用整数类型或者精度要根据情况来选择
比如有关年龄数据可以考虑都用int
有关购物消费数据可以考虑使用float
数组类型
这个参数比较难理解
英语比较好的读者可以先看原版开发手册,吃力的同学直接跳过
---------------------------------------分割线------------------------------------------------------------
我的理解:
就是调用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]
布尔类型
简而言之就是
如果设置为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,)
是个标量
会把这个标量也加入到累加结果中,相当于加了个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]
布尔类型
如果为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]
如果不设定axis的值,将会返回一个标量
如果axis=0/1,则返回与a相同形状的数组(具体看沿哪个轴相加)
如果多次调用该函数,还是建议加上out参数,这样可以节省大量内存!!!!