python不确定性中的平均值

时间:2017-04-26 14:40:38

标签: python arrays uncertainty

我的问题:

我在pythons不确定性包中有一系列ufloats(例如一个unarray)。 数组的所有值都有自己的错误,我需要一个funktion,它给出了关于两者的数组的平均值,错误 我在计算名义值的平均值和值误差的影响时得到了。

我有一个uarray:

2 +/- 1 3 +/- 2 4 +/- 3

需要一个funktion,它给出了数组的平均值。

由于

2 个答案:

答案 0 :(得分:1)

除非我遗漏了某些东西,否则你可以计算sum除以数组的长度:

from uncertainties import unumpy, ufloat
import numpy as np
arr = np.array([ufloat(2, 1), ufloat(3, 2), ufloat(4,3)])
print(sum(arr)/len(arr))
# 3.0+/-1.2

你也可以这样定义:

arr1 = unumpy.uarray([2, 3, 4], [1, 2, 3])
print(sum(arr1)/len(arr1))
# 3.0+/-1.2

uncertainties负责其余的工作。

答案 1 :(得分:0)

假设高斯统计量,不确定性来自高斯父代分布。在这种情况下,通常通过反方差对测量值(标称值)加权。将该应用应用于一般加权平均值可以得出

$$ \ frac {\ sum_i w_i x_i} {\ sum_i w_i} = \ frac {\ sum_i x_i / \ sigma_i ^ 2} {\ sum_i 1 / \ sigma_i ^ 2} $$。

只需对此进行良好的'ol错误传播,即可得出加权平均值的不确定性,

$$ \ sqrt {\ sum_i \ frac {1} {1 / \ sum_i \ sigma_i ^ 2}} $$。

我没有句法上讲的n字长公式,但这是在简单情况下如何获得加权平均值及其不确定性的方法:

    a = un.ufloat(5, 2)
    b = un.ufloat(8, 4)
    wavg = un.ufloat((a.n/a.s**2 + b.n/b.s**2)/(1/a.s**2 + 1/b.s**2), 
                     np.sqrt(2/(1/a.s**2 + 1/b.s**2)))
    print(wavg)
    >>> 5.6+/-2.5298221281347035

正如人们所期望的那样,结果趋向于趋近于具有较小不确定性的值。这样做的好处是,测量中较小的不确定性意味着与不确定性较大的标称值相比,其关联的标称值更接近父分布中的真实值。

很抱歉缺少数学模式渲染。我认为这比尝试用单词写出数学更好。如果难以辨认,您应该可以将TeX($$的东西)拍到背面。