Python 3.x Numba JIT给出LoweringError,尽管代码在其他方面工作正常

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

我有以下python代码来计算Mandelbrot集。它工作得很好,但是当我试图通过在函数def之前添加
@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