使用PaCal统计包时出现python错误

时间:2014-06-23 13:04:16

标签: python python-2.7 mathematical-packages

我最近开始探索Python并且使用名为PaCal

的包来解决问题

除了我想要打印出一些数据(例如print A.mean())时我一直有这个错误,一切看起来都很好 错误行是:

Traceback (most recent call last):
  File "C:\Users\rmobenta\Desktop\tt.py", line 12, in <module>
    print A.interval(0.95)
  File "C:\Python27\lib\site-packages\pacal\distr.py", line 229, in interval
    return self.quantile(p_lim), self.quantile(1.0 - p_lim)
  File "C:\Python27\lib\site-packages\pacal\distr.py", line 215, in quantile
    return self.get_piecewise_cdf().inverse(y)
  File "C:\Python27\lib\site-packages\pacal\segments.py", line 1721, in inverse
    x = findinv(segi.f,  a = segi.a, b = segi.b, c = y, rtol = params.segments.cumint.reltol, maxiter = params.segments.cumint.maxiter) # TODO PInd, MInf
  File "C:\Python27\lib\site-packages\pacal\utils.py", line 384, in findinv
    return brentq(lambda x : fun(x) - c, a, b, **kwargs)
  File "C:\Python27\lib\site-packages\scipy\optimize\zeros.py", line 414, in brentq
    raise ValueError("rtol too small (%g < %g)" % (rtol, _rtol))
ValueError: rtol too small (1e-16 < 4.44089e-16)

我正在使用我获得的两行脚本进行演示(由该软件包的作者给出)并且不知道如何解决这个问题。

这是脚本:

from pacal import *
Y = UniformDistr(1, 2)
X = UniformDistr(3, 4)
A = atan(Y / X)
A.plot()

print A.mean()
print A.interval(0.95)

1 个答案:

答案 0 :(得分:0)

问题来自PaCal,它定义在 params.py l.141中:segments.vumint.reltol = 1e-16

这是在 segments.py 中作为rtol传递给SciPy函数brentq()的值。

最后将其与 scipy / optimize / zeros.py numpy.finfo(float).eps * 2l.413l.10进行比较,但不幸的是,它很少。

因此,这可能是PaCal实施的问题,与您的代码无关。

请注意,您提供给interval()的值对应于 distr.py 的默认值(l.222)。

我认为您应该联系PaCal开发人员以获取更多信息,并可能会出现问题。