Python 3.x Numba JIT给出LoweringError,尽管代码在其他方面工作正常
我有以下python代码来计算Mandelbrot集。它工作得很好,但是当我试图通过在函数def之前添加Python 3.x Numba JIT给出LoweringError,尽管代码在其他方面工作正常,python-3.x,math,jit,mandelbrot,Python 3.x,Math,Jit,Mandelbrot,我有以下python代码来计算Mandelbrot集。它工作得很好,但是当我试图通过在函数def之前添加@JITdecorator来用JIT编译它时,它就不再工作了。有人能告诉我为什么吗?如果您不批评我的Mandelbrot计算(我猜它可能会被优化),并且告诉我为什么JIT不能使用这个函数,我将不胜感激。顺便说一下,代码缩进在def之后。当我把它插入这里时,它看起来不是那样的 def mandelbrot(xmin,xmax,ymin,ymax,width,height,maxiter): po
@JIT
decorator来用JIT编译它时,它就不再工作了。有人能告诉我为什么吗?如果您不批评我的Mandelbrot计算(我猜它可能会被优化),并且告诉我为什么JIT不能使用这个函数,我将不胜感激。顺便说一下,代码缩进在def之后。当我把它插入这里时,它看起来不是那样的
def mandelbrot(xmin,xmax,ymin,ymax,width,height,maxiter):
points=[]
x=np.linspace(xmin,xmax,width)
y=np.linspace(ymin,ymax,height)
for ix,re in enumerate(x):
points.append([])
for iy,im in enumerate(y):
cx=re
cy=im
zx=0
zy=0
for n in range(maxiter):
if zx*zx+zy*zy>4.0:
iters=n
break
else:
oldzx=zx
oldzy=zy
zy = 2*oldzx*oldzy+cy
zx = oldzx*oldzx-oldzy*oldzy+cx
iters=n
points[ix].append(int(iters))
return points
我得到以下错误报告,最后一行是LoweringError
runfile('D:/python程序/mandelbrot/mandelbrot.py',wdir='D:/python
程序/mandelbrot')回溯(最近一次呼叫最后一次):
文件“”,第1行,在
runfile('D:/python程序/mandelbrot/mandelbrot.py',wdir='D:/python程序/mandelbrot')
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,
第786行,在runfile中
execfile(文件名、命名空间)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,
第110行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“D:/python programs/mandelbrot/mandelbrot.py”,第41行,在
mandelbrot_集=mandelbrot(-2.0,1.0,-1.5,1.5500500,50)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\dispatcher.py”,
第368行,为参数编译
提高e
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\dispatcher.py”,
第325行,为参数编译
返回self.compile(元组(argtypes))
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\dispatcher.py”,
第653行,在编译中
cres=self.\u compiler.compile(参数,返回类型)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\dispatcher.py”,
第83行,在编译中
管道类=自管道类)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
873,额外编制
返回管道.compile_extra(func)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
367,额外编译
返回self.\u编译\u字节码()
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
804,编译字节码
返回self.\u编译\u核心()
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
791,在编译内核中
res=pm.run(self.status)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
253,在逃
引发修补的\u异常
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
245,在运行中
阶段(
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
438,在阶段\对象模式\前端
cres=自身前端_looplift()
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
428,在前端_环提升中
提升=元组(循环),提升\u自=无)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
887,在编译中
提升自=提升自)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
375,在编译中
返回self.\u编译\u ir()
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
811,在
返回self.\u编译\u核心()
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
791,在编译内核中
res=pm.run(self.status)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
253,在逃
引发修补的\u异常
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
245,在运行中
阶段(
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
652,在后台
self.\u后端(lowerfn,objectmode=True)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
628,在后端
降低=降低fn()
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
601,在后端对象模式下
自我保护(国旗)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\compiler.py”,第行
1018,在py_下降_阶段
lower.lower()
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\lowing.py”,第行
173,在下
self.lower\u normal\u函数(self.fndesc)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\lowing.py”,第行
214,在下_正常_功能中
入口\u块\u尾=self.lower\u函数\u体()
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\lowing.py”,第行
239,在下_功能_体中
自下位块(块)
文件
“C:\Users\Matthew\Anaconda3\lib\site packages\numba\lowing.py”,第行
254,在下_区
自下仪表(仪表)
文件“C:\Users\Matthew\Anaconda3\lib\contextlib.py”,第130行,在
退出
self.gen.throw(类型、值、回溯)
文件“C:\Users\Matthew\Anaconda3\lib\site packages\numba\errors.py”,
第585行,在新的错误上下文中
六、重放(类型(newerr)、newerr、tb)
文件“C:\Users\Matthew\Anaconda3\lib\site packages\numba\six.py”,
第659行,重新播放
增值
下降误差:iters
文件“mandelbrot.py”,第17行:def
mandelbrot(xmin、xmax、ymin、ymax、宽度、高度、最大值):
对于ix,re在枚举(x)中:
points.append([])
^
我解决了这个问题。似乎我需要在开始时将变量“iters”初始化为0
def mandelbrot(xmin,xmax,ymin,ymax,width,height,maxiter):
points=[]
x=np.linspace(xmin,xmax,width)
y=np.linspace(ymin,ymax,height)
for ix,re in enumerate(x):
points.append([])
for iy,im in enumerate(y):
iters=0
cx=re
cy=im
zx=0
zy=0
for n in range(maxiter):
if zx*zx+zy*zy>4.0:
iters=n
break
else:
oldzx=zx
oldzy=zy
zy = 2*oldzx*oldzy+cy
zx = oldzx*oldzx-oldzy*oldzy+cx
iters=n
points[ix].append(iters)
return points