ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-11 14:55:33  阅读:577  来源: 互联网

标签:python scipy odeint integrate ode


使用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, 0, 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只能提高大型系统(可能是一百万个方程式)的性能.

标签:python,scipy,odeint,integrate,ode
来源: https://codeday.me/bug/20190711/1433477.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有