numpy.sum#

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)[源代码]#

对给定轴上的数组元素求和。

参数:
a类数组对象

要求和的元素。

axisNone 或 int 或 int 元组,可选

执行求和的轴。默认值 axis=None 将对输入数组的所有元素求和。如果 axis 为负数,则从最后一个轴计数到第一个轴。如果 axis 是一个整数元组,则对元组中指定的所有轴求和,而不是像之前那样对单个轴或所有轴求和。

dtypedtype, optional

返回数组的类型以及求和元素的累加器类型。默认使用 adtype,除非 a 的整数 dtype 的精度低于默认平台整数。在这种情况下,如果 a 是有符号的,则使用平台整数;如果 a 是无符号的,则使用与平台整数相同精度的无符号整数。

outndarray,可选

用于放置结果的备用输出数组。它必须与预期输出具有相同的形状,但输出值的类型将在必要时进行转换。

keepdimsbool,可选

如果设置为 True,则被缩减的轴将保留在结果中,其大小为 1。使用此选项,结果将能够与输入数组正确广播。

如果传递默认值,则 keepdims 不会传递给 ndarray 的子类的 sum 方法,但任何非默认值都会传递。如果子类的方法不实现 keepdims,则会引发任何异常。

initial标量,可选

求和的起始值。有关详细信息,请参阅 reduce

wherearray_like of bool,可选

包含在求和中的元素。有关详细信息,请参阅 reduce

返回:
sum_along_axisndarray

一个形状与 a 相同的数组,其中指定的轴已被移除。如果 a 是一个 0 维数组,或者 axisNone,则返回一个标量。如果指定了输出数组,则返回 out 的引用。

另请参阅

ndarray.sum

等效方法。

add

numpy.add.reduce 等效函数。

cumsum

数组元素的累积和。

trapezoid

使用复合梯形规则对数组值进行积分。

meanaverage

备注

使用整数类型时,算术运算是模运算,并且不会在溢出时引发错误。

空数组的和是中性元素 0。

>>> np.sum([])
0.0

对于浮点数,求和(以及 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