使用numpy.averag的加权平均

2024-04-26 21:49:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组:

In [37]: bias_2e13 # our array
Out[37]: 
[1.7277990734072355,
 1.9718263893212737,
 2.469657573252167,
 2.869022991373125,
 3.314720313010104,
 4.232269039271717]

数组中每个值的错误为:

In [38]: bias_error_2e13 # the error on each value
Out[38]: 
array([ 0.13271387,  0.06842465,  0.06937965,  0.23886647,  0.30458249,
        0.57906816])

现在我将每个值的误差除以2:

In [39]: error_half # error divided by 2
Out[39]: 
array([ 0.06635694,  0.03421232,  0.03468982,  0.11943323,  0.15229124,
        0.28953408])

现在我使用numpy.average计算数组的平均值,但使用errors作为weights

首先我使用值上的全错误,然后使用 误差,即误差除以2。

In [40]: test = np.average(bias_2e13,weights=bias_error_2e13)

In [41]: test_2 = np.average(bias_2e13,weights=error_half)

当一个数组的错误是另一个数组的一半时,这两个平均值如何给出相同的结果?

In [42]: test
Out[42]: 3.3604746813456936

In [43]: test_2
Out[43]: 3.3604746813456936

Tags: intest错误npourerror数组out
2条回答

因为所有的误差都有相同的相对重量。提供weight参数不会更改平均值的实际值,它只是指示每个值对平均值的权重。换句话说,将传递的每个值乘以其相应的权重后,np.average除以提供的权重之和。

>>> import numpy as np
>>> np.average([1, 2, 3], weights=[0.2, 0.2, 0.2])
2.0
>>> np.average([1, 2, 3])
2.0

实际上,类n维数组容器的平均公式是

enter image description here

当未提供给^{}时,假设每个重量等于1。

来自scipy.org关于numpy average:“与a中的值关联的权重数组。a中的每个值根据其关联的权重贡献平均值。” 这意味着错误的贡献相对于平均值!所以用同样的因子乘上错误不会改变任何东西!例如,尝试将第一个错误与0.5相乘,就会得到不同的结果。

相关问题 更多 >