我最近在使用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)
和以前一样,我正在排除故障排除建议。感谢。
答案 0 :(得分:0)
我联系了维加斯作者,他确定该问题与使用32位浮点数的Windows有关,而不是基于Unix系统的64位浮点数。他通过发布适用于Windows的gvar(8.0)修订版修复了这个问题。