numpy.average#

numpy.average(a, axis=None, weights=None, returned=False, *, keepdims=<no value>)[源代码]#

计算指定轴上的加权平均值。

参数:
a类数组对象

包含要计算平均值的数据的数组。如果 a 不是数组,则会尝试进行转换。

axisNone 或 int 或 int 元组,可选

用于计算 a 平均值的轴。默认为 axis=None,将计算输入数组所有元素的平均值。如果 axis 为负数,则从最后一个轴计数到第一个轴。如果 axis 是一个整数元组,则在元组中指定的所有轴上执行平均计算,而不是像以前那样在单个轴或所有轴上执行。

weightsarray_like, optional

a 中的值相关的权重的数组。 a 中的每个值根据其关联的权重对平均值做出贡献。如果未指定轴,则权重数组的形状必须与 a 相同,否则权重的维度和形状必须与 a 沿指定轴一致。如果 weights=None,则假定 a 中的所有数据权重均为一。计算公式为:

avg = sum(a * weights) / sum(weights)

其中求和是对所有包含的元素进行的。权重值唯一的约束是 sum(weights) 不能为 0。

returnedbool, optional

默认为 False。如果为 True,则返回元组 (average, sum_of_weights),否则仅返回平均值。如果 weights=None,则 sum_of_weights 等同于计算平均值的元素数量。

keepdimsbool,可选

如果设置为 True,则被约简的轴将保留在结果中,尺寸为 1。使用此选项,结果将能正确地广播到原始 a。*注意:* keepdims 不能与 numpy.matrix 实例或其他不支持 keepdims 方法的类一起使用。

新版本 1.23.0。

返回:
retval, [sum_of_weights]array_type or double

返回沿指定轴的平均值。当 returnedTrue 时,返回一个元组,其中平均值是第一个元素,权重之和是第二个元素。 sum_of_weights 的类型与 retval 相同。结果的 dtype 遵循一般模式。如果 weights 为 None,则结果的 dtype 将为 a 的 dtype,或者如果 a 是整数类型,则为 float64。否则,如果 weights 不为 None 且 a 是非整数类型,则结果类型将是能够表示 aweights 值的最低精度的类型。如果 a 恰好是整数类型,则上述规则仍然适用,但结果的 dtype 至少为 float64

引发:
ZeroDivisionError

当沿轴的所有权重都为零时。有关鲁棒处理此类型错误的版本的 numpy.ma.average,请参见。

TypeError

weights 的形状与 a 不同,并且 axis=None 时。

ValueError

weights 的维度和形状与 a 沿指定的 axis 不一致时。

另请参阅

mean
ma.average

掩码数组的平均值——当你的数据包含“缺失”值时很有用

numpy.result_type

返回将 numpy 类型提升规则应用于参数后得到的结果类型。

示例

>>> import numpy as np
>>> data = np.arange(1, 5)
>>> data
array([1, 2, 3, 4])
>>> np.average(data)
2.5
>>> np.average(np.arange(1, 11), weights=np.arange(10, 0, -1))
4.0
>>> data = np.arange(6).reshape((3, 2))
>>> data
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> np.average(data, axis=1, weights=[1./4, 3./4])
array([0.75, 2.75, 4.75])
>>> np.average(data, weights=[1./4, 3./4])
Traceback (most recent call last):
    ...
TypeError: Axis must be specified when shapes of a and weights differ.

keepdims=True 时,以下结果的形状为 (3, 1)。

>>> np.average(data, axis=1, keepdims=True)
array([[0.5],
       [2.5],
       [4.5]])
>>> data = np.arange(8).reshape((2, 2, 2))
>>> data
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> np.average(data, axis=(0, 1), weights=[[1./4, 3./4], [1., 1./2]])
array([3.4, 4.4])
>>> np.average(data, axis=0, weights=[[1./4, 3./4], [1., 1./2]])
Traceback (most recent call last):
    ...
ValueError: Shape of weights must be consistent
with shape of a along specified axis.