numpy.average#

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

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

参数:
aarray_like

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

axisNone 或 int 或 int 元组,可选

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

weightsarray_like, optional

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

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

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

returnedbool, 可选

默认为 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 或 double

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

提出:
ZeroDivisionError

当沿轴的所有权重均为零时. 有关对此类错误具有鲁棒性的版本,请参见 numpy.ma.average .

TypeError

weightsa 的形状不同,且 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.