小编hop*_*eso的帖子

当类的属性包含另一个类实例时,如何指定numba jitclass?

我正在尝试使用numba来提升scipy.integrate.odeint的python性能.为此,我必须使用@ nb.jit(nopython = True)来定义ODE系统的函数.但是,这个函数必须在我的程序中将另一个python类实例作为参数.我还必须使用适当的规格与@ nb.jitclass(s​​pec)一起使用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)

python jit scipy odeint numba

4
推荐指数
1
解决办法
924
查看次数

标签 统计

jit ×1

numba ×1

odeint ×1

python ×1

scipy ×1