Python 使用numpy.average进行加权平均

Python 使用numpy.average进行加权平均,python,python-2.7,numpy,average,weighted-average,Python,Python 2.7,Numpy,Average,Weighted Average,我有一个数组: 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

我有一个数组:

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
计算数组的平均值,但使用
错误
作为
权重

首先,我在值上使用完全错误,然后使用一半错误 误差,即误差除以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

因为所有的误差都具有相同的相对权重。提供一个
权重
参数不会改变平均值的实际值,它只是指示每个值对平均值的贡献权重。换句话说,将传递的每个值乘以相应的权重后,
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
维数组(如容器)的平均公式为


其中,当未提供给时,假设每个权重等于1。

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

我的答案晚了,但我希望这对以后阅读这篇文章的其他人有用

关于为什么结果是一样的,上面的答案很贴切。然而,在计算加权平均数的过程中存在一个根本性的缺陷。数据中的不确定性不是numpy.average期望的权重。你必须先计算你的体重,然后提供给numpy.average。这可以通过以下方式实现:

权重=1/(不确定度)^2

(例如,见)

因此,您可以将加权平均数计算为:

wts_2e13=1./(np.功率(偏差误差_2e13,2.))#使用误差计算权重

wts_-half=1./(np.power(误差_-half,2.))#使用半误差计算重量

测试=np.平均值(偏差,权重=wts)

测试2=np.平均值(偏差13,权重=wts的一半)

在这两种情况下都给出了2.2201767077906709的答案,原因在上述答案中有很好的解释