Python维加斯错误

时间:2016-11-04 03:58:08

标签: python numerical-integration

我最近在使用Python 2.7的Windows 10计算机上安装了维加斯蒙特卡罗集成包(版本3.0.1)。一切似乎都没问题,我可以输入拉斯维加斯。我从维加斯教程中复制了这段代码:

import vegas
import math

def f(x):
    dx2 = 0
    for d in range(4):
        dx2 += (x[d] - 0.5) ** 2
    return math.exp(-dx2 * 100.) * 1013.2118364296088

integ = vegas.Integrator([[-1, 1], [0, 1], [0, 1], [0, 1]])

result = integ(f, nitn=10, neval=1000)
print result.summary()
print 'result = %s    Q = %.2f' % (result, result.Q)

从Jupyter笔记本运行,我收到以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-1-c50a62cfad78> in <module>()
     10 integ = vegas.Integrator([[-1, 1], [0, 1], [0, 1], [0, 1]])
     11 
---> 12 result = integ(f, nitn=10, neval=1000)
     13 print result.summary()
     14 print 'result = %s    Q = %.2f' % (result, result.Q)

src/vegas/_vegas.pyx in random_batch (src/vegas/_vegas.c:19152)()

src/vegas/_vegas.pyx in vegas._vegas.VegasResult.__init__ (src/vegas/_vegas.c:31214)()

src/vegas/_vegas.pyx in vegas._vegas.RAvg.__init__ (src/vegas/_vegas.c:24657)()

src/gvar/_gvarcore.pyx in gvar._gvarcore.GVarFactory.__call__ (src/gvar/_gvarcore.c:15024)()

src/gvar/_svec_smat.pyx in gvar._svec_smat.smat.append_diag (src/gvar/_svec_smat.c:7055)()

src/gvar/_svec_smat.pyx in gvar._svec_smat.smat.append_diag (src/gvar/_svec_smat.c:6723)()

ValueError: Buffer dtype mismatch, expected 'intp_t' but got 'long'

我将不胜感激任何疑难解答。 编辑: 我现在意识到问题在于Gvar包,这是拉斯维加斯的先决条件包。我可以重现如下错误:

import gvar as gv
x = gv.gvar(0, 0.3)

和以前一样,我正在排除故障排除建议。感谢。

1 个答案:

答案 0 :(得分:0)

我联系了维加斯作者,他确定该问题与使用32位浮点数的Windows有关,而不是基于Unix系统的64位浮点数。他通过发布适用于Windows的gvar(8.0)修订版修复了这个问题。