我正在尝试使用numba来提升scipy.integrate.odeint的python性能.为此,我必须使用@ nb.jit(nopython = True)来定义ODE系统的函数.但是,这个函数必须在我的程序中将另一个python类实例作为参数.我还必须使用适当的规格与@ nb.jitclass(spec)一起使用jit.这很好,直到我发现一个严重的问题,当类的规范包括另一种类的实例作为其方法.我的代码如下.
import numba as nb
from scipy.integrate import odeint
spec1=[("hi", nb.i4)]
@nb.jitclass(spec1)
class Hi(object):
def __init__(self):
self.hi = 0
spec2=[("dummy", nb.i4), ("dummy1", nb.i4)]
@nb.jitclass(spec2)
class Dummy(object):
def __init__(self, anotherClassInstance):
self.dummy = 0
self.dummy1 = anotherClassInstance
class A:
def __init__(self, someClassInstance):
self.a1 = someClassInstance
def odeSystem(self, x, t):
return _odeSystem(x, t, self.a1)
def odeSolve(self, iValues, ts):
sol = odeint(self.odeSystem, iValues, ts)
return sol
@nb.jit(nopython=True)
def _odeSystem(x, t, someClassInstance):
return 1-x
if __name__ == "__main__":
c = Hi() …Run Code Online (Sandbox Code Playgroud)