numpy.sum#
- numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)[source]#
沿给定轴计算数组元素的总和。
- 参数:
- aarray_like
要计算总和的元素。
- axisNone 或 int 或 int 元组,可选
执行求和运算的轴或轴。默认值 axis=None 将对输入数组的所有元素求和。如果 axis 为负数,则从最后一个轴到第一个轴进行计数。
版本 1.7.0 中的新功能。
如果 axis 是一个 int 元组,则在元组中指定的所有轴上执行求和,而不是像以前那样在一个轴或所有轴上执行。
- dtypedtype,可选
返回数组和累加器的类型,其中元素被求和。默认情况下使用 a 的 dtype,除非 a 的整数 dtype 的精度低于默认平台整数。在这种情况下,如果 a 是有符号的,则使用平台整数,而如果 a 是无符号的,则使用与平台整数相同精度的无符号整数。
- outndarray,可选
放置结果的备用输出数组。它必须与预期输出具有相同的形状,但如果需要,输出值的类型将被强制转换。
- keepdimsbool,可选
如果将其设置为 True,则减少的轴将作为大小为一的维度保留在结果中。使用此选项,结果将针对输入数组正确广播。
如果传递默认值,则 keepdims 不会传递到
sum
方法的ndarray
子类的sum
方法,但是任何非默认值都会传递。如果子类的sum
方法没有实现 keepdims,则会引发任何异常。- initial标量,可选
求和的起始值。有关详细信息,请参见
reduce
。版本 1.15.0 中的新功能。
- wherebool 型数组,可选
要包含在总和中的元素。有关详细信息,请参见
reduce
。版本 1.17.0 中的新功能。
- 返回值:
- 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) 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) -128
您还可以使用除零以外的值开始求和
>>> np.sum([10], initial=5) 15