numpy.sum#
- numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)[源代码]#
给定轴上数组元素的总和.
- 参数:
- aarray_like
要相加的元素.
- axisNone 或 int 或 int 元组,可选
执行求和运算的轴或多个轴.默认值 axis=None 将对输入数组的所有元素求和.如果 axis 为负数,它从最后一个轴计数到第一个轴.如果 axis 是整数元组,则对元组中指定的所有轴执行求和,而不是像以前那样对单个轴或所有轴求和.
- dtypedtype, optional
返回数组的类型以及在其中对元素求和的累加器的类型.默认情况下使用 a 的 dtype,除非 a 具有比默认平台整数精度低的整数 dtype. 在这种情况下,如果 a 是有符号的,则使用平台整数,而如果 a 是无符号的,则使用与平台整数精度相同的无符号整数.
- outndarray, 可选
用于放置结果的可选输出数组.它必须具有与预期输出相同的形状,但如果必要,将强制转换输出值的类型.
- keepdimsbool, 可选
如果将其设置为 True,则缩减的轴将作为大小为 1 的维度保留在结果中.使用此选项,结果将针对输入数组正确广播.
如果传递默认值,则 keepdims 不会传递给
ndarray子类的sum方法,但是任何非默认值都会传递.如果子类的方法未实现 keepdims ,则会引发任何异常.- initial标量,可选.
总和的起始值.有关详细信息,请参见
reduce.- wherebool 的类数组对象,可选
要包含在总和中的元素.有关详细信息,请参见
reduce.
- 返回:
- sum_along_axisndarray
一个与 a 形状相同的数组,其中指定的轴已删除.如果 a 是 0 维数组,或者如果 axis 为 None,则返回一个标量.如果指定了输出数组,则返回对 out 的引用.
参见
注释
使用整数类型时,算术是模运算,并且在溢出时不会引发错误.
空数组的和是中性元素 0:
>>> np.sum([]) 0.0
对于浮点数,sum(以及
np.add.reduce)的数值精度通常受到将每个数字单独添加到结果的限制,从而在每一步都导致舍入误差.但是,通常 numpy 会使用数值上更好的方法(部分成对求和),从而在许多用例中提高精度.当没有给出axis时,始终提供这种改进的精度.当给出axis时,它将取决于对哪个轴求和.从技术上讲,为了提供尽可能最佳的速度,只有在求和沿内存中的快速轴进行时才使用改进的精度.请注意,确切的精度可能会因其他参数而异.与 NumPy 相比,Python 的math.fsum函数使用较慢但更精确的求和方法.特别是当对大量较低精度的浮点数(例如float32)求和时,数值误差可能会变得很大.在这种情况下,建议使用 dtype=”float64” 来为输出使用更高的精度.示例
>>> import numpy as np >>> np.sum([0.5, 1.5]) 2.0 >>> np.sum([0.5, 0.7, 0.2, 1.5], dtype=np.int32) np.int32(1) >>> np.sum([[0, 1], [0, 5]]) 6 >>> np.sum([[0, 1], [0, 5]], axis=0) array([0, 6]) >>> np.sum([[0, 1], [0, 5]], axis=1) array([1, 5]) >>> np.sum([[0, 1], [np.nan, 5]], where=[False, True], axis=1) array([1., 5.])
如果累加器太小,则会发生溢出:
>>> np.ones(128, dtype=np.int8).sum(dtype=np.int8) np.int8(-128)
您也可以使用非零值开始求和:
>>> np.sum([10], initial=5) 15