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只能提高大型系统(可能是一百万个方程式)的性能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |