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

     2023-03-12     44

关键词:

【中文标题】将 numba.jit 与 scipy.integrate.ode 一起使用【英文标题】:Using numba.jit with scipy.integrate.ode 【发布时间】:2015-12-21 01:42:44 【问题描述】:

使用numba.jitscipy.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

任何想法如何克服这个问题?

【问题讨论】:

没有jit 是否可以工作?您的 rhs 接受参数、求解器变化的 t 以及您提供的 X(通过额外的参数元组)。 是的,没有jit 它可以正常工作。额外参数元组是什么意思? 我也有类似的问题。 【参考方案1】:

我不知道原因或解决方案,但在这种情况下,Theano 有助于加快计算速度。 Theano 本质上会编译 numpy 表达式,因此只有当您可以将 rhs 编写为多维数组的表达式时它才会有所帮助(而 jit 知道 for 和朋友们)。它还知道一些代数并优化计算。

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

【讨论】:

【参考方案2】:

您可以使用包装函数,但我认为它不会提高小型 rhs 函数的性能。

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

def wrapper(t, X):
    return rhs(t, X)

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

【讨论】:

调用 numba jit 函数时,cProfile 会增加大量开销

】调用numbajit函数时,cProfile会增加大量开销【英文标题】:cProfileaddssignificantoverheadwhencallingnumbajitfunctions【发布时间】:2018-12-2507:40:09【问题描述】:将纯Python无操作函数与以@numba.jit修饰的无操作函数进行比较,即:importnumba@nu... 查看详情

numba - guvectorize 几乎比 jit 快

】numba-guvectorize几乎比jit快【英文标题】:numba-guvectorizebarelyfasterthanjit【发布时间】:2017-06-0719:47:03【问题描述】:我试图并行化在许多独立数据集上运行的蒙特卡洛模拟。我发现numba的并行guvectorize实现仅比numbajit实现快30-40%。... 查看详情

Numba:@jit 中的并行标志在我的带有 numpy 2D 数组的代码中不起作用

】Numba:@jit中的并行标志在我的带有numpy2D数组的代码中不起作用【英文标题】:Numba:parallelflagin@jitdoesnotworkinmycodewithnumpy2Darrays【发布时间】:2022-01-1703:48:59【问题描述】:首先,我问了这个问题Numba:Whyguvectorizeissoslow?。当我发现... 查看详情

如何在一个简单的功能上 Cythonize / 允许 numba.jit:(在网络中查找三角形)

】如何在一个简单的功能上Cythonize/允许numba.jit:(在网络中查找三角形)【英文标题】:HowtoCythonize/allownumba.jitonasimplefunction:(FindingTrianglesinnetwork)【发布时间】:2021-09-1507:46:59【问题描述】:背景故事:我一直在寻找一种高性能... 查看详情

使用带有 numba njit 功能的字典

】使用带有numbanjit功能的字典【英文标题】:UsingDictionarieswithnumbanjitfunction【发布时间】:2019-07-3109:30:11【问题描述】:当输入和返回是字典时,如何使用numba加速函数?我熟悉将numba用于接受数字并返回数组的函数,如下所示:... 查看详情

numba安装和使用

numba是针对python加速的包,类似cython,pypy,优势是代码改动少首先要安装llvmliteapt-getinstallllvm-3.8LLVM_CONFIG=/usr/local/llvm38/3.8.1/lib/llvm-3.8/bin/llvm-configpipinstallllvmlite#看自己路径在哪程序里importnumba@numba.jit()装饰要加速的函数 查看详情

分析 numba 包装函数的覆盖率

】分析numba包装函数的覆盖率【英文标题】:Analyzingcoverageofnumba-wrappedfunctions【发布时间】:2015-01-0814:38:02【问题描述】:我写了apythonmodule,其中大部分都包裹在@numba.jit装饰器中以提高速度。我还为这个模块编写了很多测试,我... 查看详情

taichi的学习笔记(代码片段)

1感想南溪看了一些关于Taichi的资料,我感觉它就是“JIT+CUDA”的超强编译器,既具有“CUDA-C++”的超快速度,而且像numba.jit一样可以通过装饰器的方式使用,比较方便; 查看详情

php[将产品与社交共享插件集成]将社交共享插件与woocommerce集成-sharedaddy(代码片段)

查看详情

php[将产品与社交共享插件集成]将社交共享插件与woocommerce集成-sharedaddy(代码片段)

查看详情

php[将产品与社交共享插件集成]将社交共享插件与woocommerce集成-sharedaddy(代码片段)

查看详情

将 UIRefreshControl 与 QuickDialog 一起使用

】将UIRefreshControl与QuickDialog一起使用【英文标题】:UsingUIRefreshControlwithQuickDialog【发布时间】:2014-05-2614:48:10【问题描述】:应该如何将UIRefreshControl与QuickDialog(https://github.com/escoz/QuickDialog)一起使用?我解释文档的方式是,控件... 查看详情

将应用与现有主页连接

】将应用与现有主页连接【英文标题】:ConnectappwithexistingPage【发布时间】:2012-02-2202:24:47【问题描述】:我创建了一个Web应用程序,用于对我们页面上的用户进行身份验证,我想将它与现有页面连接,但找不到该选项。我只在... 查看详情

php[将产品与社交共享插件集成]将社交共享插件与woocommerce集成-分享此功能(代码片段)

查看详情

php[将产品与社交共享插件集成]将社交共享插件与woocommerce集成-分享此功能(代码片段)

查看详情

php[将产品与社交共享插件集成]将社交共享插件与woocommerce集成-分享此功能(代码片段)

查看详情

将图像与文本对齐[重复]

】将图像与文本对齐[重复]【英文标题】:Aligningimageswithtext[duplicate]【发布时间】:2014-11-0413:29:29【问题描述】:我无法将图像与文本对齐。我希望我的图像在左侧,内嵌文本在右侧,与图像垂直居中。<divclass="container"><sp... 查看详情

将 Apollo for iOS 与现有项目集成?

】将ApolloforiOS与现有项目集成?【英文标题】:IntegrateApolloforiOSwithalready-existingproject?【发布时间】:2020-05-0418:02:48【问题描述】:是否有关于如何将ApolloGraphQLSDK与现有iOS项目集成的指南?我已经有数百种数据类型,我需要将它... 查看详情