numpy.average#

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

沿指定轴计算加权平均值。

参数:
aarray_like

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

axisNone 或 int 或 int 元组,可选

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

weightsarray_like,可选

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

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

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

returnedbool,可选

默认为False。如果为True,则返回元组(averagesum_of_weights),否则只返回平均值。如果weights=None,则sum_of_weights 等于进行平均的元素个数。

keepdimsbool,可选

如果将其设置为True,则减少的轴将作为大小为一的维度保留在结果中。使用此选项,结果将与原始a正确广播。注意:keepdims不适用于numpy.matrix或其他其方法不支持keepdims的类。

版本 1.23.0 中的新功能。

返回:
retval, [sum_of_weights]array_type 或 double

返回沿指定轴的平均值。当returnedTrue时,返回一个元组,其中平均值作为第一个元素,权重之和作为第二个元素。sum_of_weightsretval的类型相同。结果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的维度和形状与沿指定axisa不一致时。

另请参见

mean
ma.average

用于掩码数组的 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.