我正在使用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的值大多是科学记数法。
答案 0 :(得分:3)
您传入的是文字字符串"i+/-uncert"
而不是变量值。
假设您使用的是最新版本的不确定因素,请执行以下操作:
temp = ufloat(i, uncert)
或者,您可以将数值格式化为字符串表示形式:
temp = ufloat('{}+/-{}'.format(i, uncert))
但是,没有理由不直接将值传递给ufloat
。