Python Uncertainties模块,ufloat无法解压变量

时间:2013-10-27 17:25:34

标签: python numpy uncertainty

我正在使用python 2.7和名为“不确定性”的模块来分析实验数据。我有两个数组,polycoeffs和cov,由numpy函数polyfit生成。我已经设法从cov数组中拉出前导对角线,并且我试图将这些值与名为uncert_coeffs的列表中的相应系数匹配,其中不确定性函数为“ufloat”。这是代码:

polycoeffs,cov=polyfit(wav,trans,6,cov=True) #wav and trans are themselves, arrays.
print  "Polycoeffs= ",polycoeffs

print "Cov= ",cov

cov_diag=[]
for element in diag(cov):
    cov_diag.append(str(element))
print "The diagonal of the covariant matrix= ",cov_diag
ord_counter=6
uncert_coeffs=[]
cov_index=0

for i in polycoeffs:
    uncert=(cov_diag[cov_index])
    print "uncert: ",uncert
    temp=ufloat("(i+/-uncert)") #error here
    uncert_coeffs.append(temp)
    cov_index+=1

print "The polynomial coefficients with uncertainties, are: ",uncert_coeffs 

这会产生错误:

ValueError: Cannot parse (i+/-uncert): was expecting a number like 1.23+/-0.1

所以我的问题是:在这些情况下,将polycoeffs及其不确定性手工结合起来将是一种巨大的痛苦,我怎样才能使ufloat解包变量uncert?另外,uncert的值大多是科学记数法。

1 个答案:

答案 0 :(得分:3)

您传入的是文字字符串"i+/-uncert"而不是变量值。

假设您使用的是最新版本的不确定因素,请执行以下操作:

temp = ufloat(i, uncert)

或者,您可以将数值格式化为字符串表示形式:

temp = ufloat('{}+/-{}'.format(i, uncert))

但是,没有理由不直接将值传递给ufloat