numpy.ma.average#

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

返回给定轴上数组的加权平均值。

参数:
aarray_like

要计算平均值的数据。计算中不考虑掩码条目。

axisNone 或 int 或 int 元组,可选

沿其计算平均值的轴或多个轴。默认值 axis=None 将计算输入数组的所有元素的平均值。如果 axis 是 int 元组,则对元组中指定的所有轴执行平均,而不是像之前那样对单个轴或所有轴执行平均。

weightsarray_like, 可选

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

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

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

returnedbool, 可选

标志,指示是否应将元组 (结果,权重之和) 作为输出返回 (True),还是仅返回结果 (False)。默认值为 False。

keepdimsbool, 可选

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

1.23.0 版本中的新功能。

返回:
average, [sum_of_weights](标量或 MaskedArray 元组)

沿指定轴的平均值。当 returned 为 True 时,返回一个元组,其中第一个元素为平均值,第二个元素为权重之和。如果 a 是整数类型和小于 float64 的浮点数,则返回类型为 np.float64,否则为输入数据类型。如果返回,则 sum_of_weights 始终为 float64

引发:
ZeroDivisionError

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

TypeError

weightsa 的形状不相同且 axis=None 时。

ValueError

weights 没有与沿指定 axisa 一致的维度和形状时。

示例

>>> import numpy as np
>>> a = np.ma.array([1., 2., 3., 4.], mask=[False, False, True, True])
>>> np.ma.average(a, weights=[3, 1, 0, 0])
1.25
>>> x = np.ma.arange(6.).reshape(3, 2)
>>> x
masked_array(
  data=[[0., 1.],
        [2., 3.],
        [4., 5.]],
  mask=False,
  fill_value=1e+20)
>>> data = np.arange(8).reshape((2, 2, 2))
>>> data
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> np.ma.average(data, axis=(0, 1), weights=[[1./4, 3./4], [1., 1./2]])
masked_array(data=[3.4, 4.4],
         mask=[False, False],
   fill_value=1e+20)
>>> np.ma.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.
>>> avg, sumweights = np.ma.average(x, axis=0, weights=[1, 2, 3],
...                                 returned=True)
>>> avg
masked_array(data=[2.6666666666666665, 3.6666666666666665],
             mask=[False, False],
       fill_value=1e+20)

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

>>> np.ma.average(x, axis=1, keepdims=True)
masked_array(
  data=[[0.5],
        [2.5],
        [4.5]],
  mask=False,
  fill_value=1e+20)