我的问题:
我在 pythons 不确定性包中有一组 ufloats(例如 unarray)。数组的所有值都有自己的误差,我需要一个函数,它给出了数组相对于两者的平均值,计算标称值的平均值时得到的误差以及值误差的影响。
我有一个uarray:
2 +/- 1
3 +/- 2
4 +/- 3
并且需要一个函数,它给我一个数组的平均值。
谢谢
我的问题:
我在 pythons 不确定性包中有一组 ufloats(例如 unarray)。数组的所有值都有自己的误差,我需要一个函数,它给出了数组相对于两者的平均值,计算标称值的平均值时得到的误差以及值误差的影响。
我有一个uarray:
2 +/- 1
3 +/- 2
4 +/- 3
并且需要一个函数,它给我一个数组的平均值。
谢谢
假设高斯统计,不确定性源于高斯父分布。在这种情况下,标准方法是通过逆方差对测量值(标称值)进行加权。这种对一般加权平均的应用给出,
$$ \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} $$。
只需对此进行良好的误差传播即可获得加权平均值的不确定性,因为,
$$ \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
正如人们所期望的那样,结果更倾向于具有较小不确定性的值。这很好,因为测量中较小的不确定性意味着其相关的标称值比具有较大不确定性的标称值更接近母分布中的真实值。
除非我遗漏了什么,否则您可以计算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
照顾其余的。