gpt4 book ai didi

Python 不确定性 Unumpy 类型错误?

转载 作者:行者123 更新时间:2023-12-01 04:41:43 24 4
gpt4 key购买 nike

我在使用 python 不确定性包时遇到了困难。我必须用python评估实验数据,我已经这样做了一段时间但从未遇到以下问题:

>>>from uncertainties import ufloat
>>>from uncertainties import unumpy as unp
>>>u = ufloat(5, 1)
>>>l = unp.log(u)
>>>print(l)
1.61+/-0.2

一切看起来都很好,对吧?但奇怪的部分来了:

>>>print(type(l))
<type 'numpy.ndarray'>

这是一个巨大问题,因为我就是这样遇到的:

>>>print(l.n)
AttributeError: 'numpy.ndarray' object has no attribute 'n'

现在在我的工作中,我迫切需要分别用于线性回归的标称值和标准差。真正奇怪的是,让我认为这实际上是一个错误的事实是,打印变量实际上按预期工作,但 python“认为”它的类型是一个数组,而实际上它应该是一个 ufloat。

有什么简单的解决方法的想法或技巧吗?你认为这是一个错误还是我错过了什么,这实际上是我的错误?

为了防止任何人问​​我为什么要进行如此简单的计算:这当然只是一个例子。在我的实际工作中,我有许多更复杂的值存储在数组中。

编辑1:https://pythonhosted.org/uncertainties/user_guide.html

编辑2:好吧,这是我实际上遇到问题的代码,上面只是为了说明问题。

d, t, n = loadtxt('mess_blei_gamma.txt', unpack=True)
fh = open('table_blei.txt', 'w')
nn = []
ln = []
for i in range(0, len(d)):
nn.append(norm(n[i], t[i], n0))
ln.append(unp.log(nn[i]))
fh.write(tex(str(d[i])+" & "+str(t[i])+" & "+str(n[i])+" & "+str(nn[i])+" & "+str(ln[i]))) #works how it's supposed to, the table is perfectly fine
fh.close()

print(unp.nominal_values(nn)) #works fine
print(unp.nominal_values(ln)) #error

最佳答案

首先,许多 unumpy 对象基本上都是 numpy 数组:

>>>arr = unp.uarray([1, 2], [0.01, 0.002])
>>>arr
[1.0+/-0.01 2.0+/-0.002]
>>>type(arr)
<type 'numpy.ndarray'>

所以你不应该感到惊讶。
顺便说一下,ufloat 是一个函数而不是类型:

>>>x = ufloat(0.20, 0.01)  # x = 0.20+/-0.01
>>>print type(x)
<class 'uncertainties.Variable'>
>>>type(ufloat)
<type 'function'>

其次,为了获得标称值,您应该使用:

unumpy.nominal_values(l)

编辑:在您编辑了原始消息后,我想我理解了您的问题。您可以在 for 循环之外使用 unumpy.log,如下所示:

>>>nn = [ ufloat(1, 2), ufloat(53, 4)]
>>>ln = unp.log(nn)
>>>ln
[0.0+/-2.0 3.970291913552122+/-0.07547169811320754]
>>>type(ln)
<type 'numpy.ndarray'>
>>>(unp.nominal_values(ln)) #now it works fine
[ 0. 3.97029191]

我也同意这种行为有点奇怪。

运行良好并实现您的目标的代码:

d, t, n = loadtxt('mess_blei_gamma.txt', unpack=True)
fh = open('table_blei.txt', 'w')
nn = (norm(n[i], t[i], n0) for i range(0, len(d)))
ln = unp.log(nn)
for i in range(0, len(d)):
fh.write(tex(str(d[i])+" & "+str(t[i])+" & "+str(n[i])+" & "+str(nn[i])+" & "+str(ln[i]))) #works how it's supposed to, the table is perfectly fine
fh.close()

print(unp.nominal_values(nn))
print(unp.nominal_values(ln))

关于Python 不确定性 Unumpy 类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30557300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com