numpy.ma.average#
- ma.average(a, axis=None, weights=None, returned=False, *, keepdims=<no value>)[源代码]#
返回给定轴上数组的加权平均值.
- 参数:
- aarray_like
要平均的数据.屏蔽条目在计算中不考虑.
- 轴None 或 int 或 int 元组,可选
要对其求 a 平均值的轴或多个轴.默认值 axis=None 将对输入数组的所有元素求平均值.如果 axis 是整数元组,则对元组中指定的所有轴(而不是单个轴或之前的所有轴)执行平均.
- weights类数组,可选
与 a 中的值相关联的权重数组. a 中的每个值根据其关联的权重对平均值做出贡献.如果没有指定轴,则权重数组必须与 a 的形状相同,否则权重必须具有与沿指定轴的 a 一致的维度和形状.如果 weights=None ,则假定 a 中的所有数据都具有等于 1 的权重.计算公式为:
avg = sum(a * weights) / sum(weights)
其中,求和是对所有包含的元素进行的. 对 weights 值的唯一约束是 sum(weights) 不能为 0.
- 已返回bool,可选
指示是否应将元组
(result, sum of weights)作为输出返回 (True),或者仅返回结果 (False) 的标志.默认为 False.- keepdimsbool,可选
如果设置为 True,则缩减的轴将作为大小为 1 的维度保留在结果中.使用此选项,结果将针对原始 a 正确广播.注意:keepdims 不适用于
numpy.matrix的实例或其他不支持 keepdims 的类.在 1.23.0 版本加入.
- 返回:
- average, [sum_of_weights](元组)标量或 MaskedArray
沿指定轴的平均值.如果返回值为 True ,则返回一个元组,其中平均值作为第一个元素,权重之和作为第二个元素.如果 a 是整数类型和小于 float64 的浮点数,则返回类型为 np.float64 ,否则为输入数据类型.如果返回 sum_of_weights ,则始终为 float64 .
- Raises:
- ZeroDivisionError
当沿轴的所有权重都为零时.有关对此类错误具有鲁棒性的版本,请参见
numpy.ma.average.- TypeError
当 weights 与 a 的形状不同,且 axis=None 时.
- ValueError
当 weights 没有维度,且形状与沿指定 axis 的 a 不一致时.
示例
>>> 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)