加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 将numba.jit与scipy.integrate.ode一起使用

发布时间:2020-12-20 13:07:27 所属栏目:Python 来源:网络整理
导读:使用 numba.jit 加速 scipy.integrate 的odeint右侧计算工作正常: from scipy.integrate import ode,odeintfrom numba import jit@jitdef rhs(t,X): return 1X = odeint(rhs,np.linspace(0,1,11)) 但是使用像这样的integrate.ode: solver = ode(rhs)solver
使用 numba.jit加速 scipy.integrate的odeint右侧计算工作正常:

from scipy.integrate import ode,odeint
from numba import jit

@jit
def rhs(t,X):
    return 1

X = odeint(rhs,np.linspace(0,1,11))

但是使用像这样的integrate.ode:

solver = ode(rhs)
solver.set_initial_value(0,0)
while solver.successful() and solver.t < 1:
    solver.integrate(solver.t + 0.1)

使用装饰器@jit产生以下错误:

capi_return is NULL
Call-back cb_f_in_dvode__user__routines failed.
Traceback (most recent call last):
  File "sandbox/numba_cubic.py",line 15,in <module>
    solver.integrate(solver.t + 0.1)
  File "/home/pgermann/Software/anaconda3/lib/python3.4/site-packages/scipy/integrate/_ode.py",line 393,in integrate
    self.f_params,self.jac_params)
  File "/home/pgermann/Software/anaconda3/lib/python3.4/site-packages/scipy/integrate/_ode.py",line 848,in run
    y1,t,istate = self.runner(*args)
TypeError: not enough arguments: expected 2,got 1

任何想法如何克服这个?

解决方法

我不知道原因或解决方案,但在这种情况下,Theano有助于加快计算速度. Theano基本上编译了numpy表达式,因此只有当你可以将rhs写成多维数组的表达式时才有用(当jit知道和朋友时).它也知道一些代数并优化计算.

除了Theano可以为GPU编译(这是我首先尝试numba.jit的原因).然而,由于开销,使用GPU只能提高大型系统(可能是一百万个方程式)的性能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读