使用 numpy.average 进行加权平均

问题描述 投票:0回答:4

我有一个数组:

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
python python-2.7 numpy average weighted-average
4个回答
40
投票

因为所有错误都具有相同的相对权重。提供

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

其中,当未提供给

numpy.average
时,假设每个权重等于 1。


4
投票

我的回答迟了,但我希望这对将来查看这篇文章的其他人有用。

对于结果相同的原因,上述答案是正确的。然而,计算加权平均值的方式存在一个根本性缺陷。数据中的不确定性不是 numpy.average 期望的权重。您必须首先计算您的权重并将其提供给 numpy.average。这可以这样做:

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

(例如,参见 此描述。

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

wts_2e13 = 1./(np.power(bias_error_2e13, 2.)) # 使用误差计算权重

wts_half = 1./(np.power(error_half, 2.)) # 使用半误差计算权重

测试 = np.average(bias_2e13, 权重 = wts_2e13)

test_2 = np.average(bias_2e13, 权重 = wts_half)

在这两种情况下都为您提供 2.2201767077906709 的答案,原因在上述答案中已得到很好的解释。


1
投票

来自 scipy.org 关于 numpyaverage 的信息:“与 a 中的值关联的权重数组。a 中的每个值根据其关联的权重对平均值做出贡献。” 这意味着误差是相对于平均值而言的!因此,相同因子的误差相乘不会改变任何东西!例如,尝试仅将第一个误差乘以 0.5,您将得到不同的结果。


0
投票

Resuelva el siguiente ejercicio:halle la covarianza y la correlación
真实的图形分散效果

   x          y       fi            

22 44 5
11 14 4
15 25 8
15 15 9
16 32 4
32 44 4
32 23 7
18 32 3
25 40 1
30 26 5

© www.soinside.com 2019 - 2024. All rights reserved.