如何使用 Numba 在 SciPy 中使用任意数量的变量和参数执行多重积分?

2024-03-14

我想用Numba修饰多重积分的被积函数,以便可以通过以下方式调用它SciPy Nquad功能作为低级可调用。理想情况下,装饰器应允许任意数量的变量以及来自 Nquad 的任意数量的附加参数args争论。这是建立在一个优秀的今年早些时候的问答 https://stackoverflow.com/questions/49683653/how-to-pass-additional-parameters-to-numba-cfunc-passed-as-lowlevelcallable-to-s,但扩展到多个变量和参数的情况。

作为示例,假设以下具有 N 个变量和 K 个参数的多重积分:

以下代码有效,但仅适用于两个变量和两个参数 (N=2,K=2)。它不适用于更一般的情况。这是因为装饰器中的一些参数是手动枚举的(xx[0],xx[1],xx[2],xx[3]在装饰器中wrapped功能)。必须针对每个不同数量的变量或参数来编辑装饰器。如果可能的话,我想避免这种情况。请注意,被积函数函数本身利用了 Numpy 对象和方法,因此不存在这个问题。

import numpy as np
import scipy.integrate as si
import numba
from numba import cfunc,carray
from numba.types import intc, CPointer, float64
from scipy import LowLevelCallable

def jit_integrand_function(integrand_function):
    jitted_function = numba.jit(integrand_function, nopython=True)

    @cfunc(float64(intc, CPointer(float64)))
    def wrapped(n, xx):
        return jitted_function(xx[0], xx[1], xx[2], xx[3])
        #xx = carray(xx,len(xx))
        #return jitted_function(xx)
    return LowLevelCallable(wrapped.ctypes)

@jit_integrand_function
def integrand(*args):
    d = np.array([args])
    return -np.exp(d.prod())

#Two variable, two parameter example
parms = np.array([2,3])
print si.nquad(integrand,[[0,1],[0,1]],parms)

理想的代码应该只使用一个装饰器被积函数还可以运行的函数:

#Three variable, three parameter example
parms2 = np.array([1,2,3])
print si.nquad(integrand,[[0,1],[0,1],[0,1]],parms2)

努巴文件 http://numba.pydata.org/numba-doc/dev/user/cfunc.html#dealing-with-pointers-and-array-memory参考一个carray http://numba.pydata.org/numba-doc/dev/reference/utils.html#numba.carray当在回调中给定低级指针和数组大小时,该函数应该返回 Numpy 数组。也许,这可以用于将代码推广到二变量二参数情况之外。我(不成功的)尝试实现这一点是在两行注释掉的代码中。

如有帮助,将不胜感激。事实上,Numba 开发人员之一指出 https://groups.google.com/a/continuum.io/forum/#!topic/numba-users/teVqeKWnJl4SciPy 集成是编写 Numba 的原因之一,但缺乏该领域的文档和示例。


以下代码有效:

import numpy as np
import scipy.integrate as si
import numba
from numba import cfunc,carray
from numba.types import intc, CPointer, float64
from scipy import LowLevelCallable

def jit_integrand_function(integrand_function):
    jitted_function = numba.jit(integrand_function, nopython=True)
    @cfunc(float64(intc, CPointer(float64)))
    def wrapped(n, xx):
        values = carray(xx,n)
        return jitted_function(values)
    return LowLevelCallable(wrapped.ctypes)

@jit_integrand_function
def integrand(args):
    return -np.exp(args.prod())

#Two variable, two parameter example
parms = np.array([2,3])
print si.nquad(integrand,[[0,1],[0,1]],parms)

#Three variable, three parameter example
parms2 = np.array([1,2,3])
print si.nquad(integrand,[[0,1],[0,1],[0,1]],parms2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Numba 在 SciPy 中使用任意数量的变量和参数执行多重积分? 的相关文章

  • 管理 Tweepy API 搜索

    如果这是对之前在其他地方回答过的问题的粗略重复 请原谅我 但我不知道如何使用 tweepy API 搜索功能 是否有任何有关如何使用搜索推文的文档api search 功能 有什么方法可以控制返回的推文数量 结果类型等功能 由于某种原因 结
  • 如何使 Django ManyToMany “直通”查询更加高效?

    我使用的是 ManyToManyField 和 through 类 这会在获取事物列表时产生大量查询 我想知道是否有更有效的方法 例如 这里有一些描述书籍及其几位作者的简化类 它们通过角色类 定义 编辑器 插画家 等角色 class Per
  • 查找 python 数据框中每行的最高值

    我想找到每行中的最高值并返回 python 中该值的列标题 例如 我想找到每行的前两个 df A B C D 5 9 8 2 4 1 2 3 我希望我的输出看起来像这样 df B C A D 您可以使用字典理解来生成largest n数据帧
  • Python Pandas 从宽到长的格式更改以及列标题拆分

    我有一个包含以下列标题和行示例的表 Subject Test1 Result1 Test1 Result2 Test2 Result1 Test2 Result2 0 John 10 0 5 20 0 3 我想将其改造成 Subject l
  • 如何充分释放函数中使用的GPU内存

    我在用着cupy在接收一个函数numpy数组 将其推到 GPU 上 对其进行一些操作并返回cp asnumpy它的副本 问题 函数执行后内存没有被释放 如ndidia smi 我知道内存的缓存和重用cupy 但是 这似乎仅适用于每个用户 当
  • Highcharts 奇怪的分组行为

    我正在使用延迟加载 http www highcharts com stock demo lazy loading加载 OHLC 数据的方法 在服务器端 我使用 Python MySQL 并有 4 个包含 OHLC 数据的表 时间间隔为 5
  • 导入错误:没有名为“wordcloud”的模块

    我正在努力将 wordcloud 安装到我的环境中 这是我正在运行的代码 import os import matplotlib pyplot as plt from wordcloud import WordCloud 我收到以下错误 I
  • 为什么我不能“string”.print()?

    我的理解print 在 Python 和 Ruby 以及其他语言 中 它是字符串 或其他类型 上的方法 因为它的语法非常常用 打印 嗨 works 那么为什么不呢 hi print 在 Python 中或 hi print在红宝石工作 当你
  • 使用 OpenCV 进行相机校准 - 如何调整棋盘方块大小?

    我正在使用 OpenCV Python 示例开发相机校准程序 来自 OpenCV 教程 http opencv python tutroals readthedocs io en latest py tutorials py calib3d
  • 覆盖现有的 django-admin 命令

    除了编写自定义 django admin 命令之外 这是有详细记录的 https docs djangoproject com en 1 9 howto custom management commands 我希望能够覆盖现有命令 例如ma
  • 获取 HTML 代码的结构

    我正在使用 BeautifulSoup4 我很好奇是否有一个函数可以返回 HTML 代码的结构 有序标签 这是一个例子 h1 Simple example h1 p This is a simple example of html page
  • 将 for 循环替换为 pyspark 中的并行进程

    我在脚本中使用 for 循环来为 size DF 数据帧 的每个元素调用函数 但这需要很多时间 我尝试通过地图删除 for 循环 但没有得到任何输出 size DF 是我从表中获取的大约 300 个元素的列表 用于 import call
  • 使用 .map() 在 pandas DataFrame 中高效创建附加列

    我正在分析形状与以下示例类似的数据集 我有两种不同类型的数据 abc数据和xyz data abc1 abc2 abc3 xyz1 xyz2 xyz3 0 1 2 2 2 1 2 1 2 1 1 2 1 1 2 2 2 1 2 2 2 3
  • Learning_rate 不是合法参数

    我正在尝试通过实现 GridSearchCV 来测试我的模型 但我似乎无法在 GridSearch 中添加学习率和动量作为参数 每当我尝试通过添加这些代码来执行代码时 我都会收到错误 这是我创建的模型 def define model op
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 如何使用 Ajax 在 Flask 中发布按钮值而不刷新页面?

    我有一个问题 当我单击 Flask 应用程序中的按钮时 我想避免重新加载 我知道有 Ajax 解决方案 但我想知道如何将我的按钮链接到 ajax 函数以发布按钮值并运行链接到其值的 python 函数 这是我的 html 按钮 div di
  • 单击 selenium 中的链接时循环遍历表格的行(python)

    示例页面源代码如下所示 div class div1 table class foot market tbody td class today name td tbody tbody td class today name td tbody
  • 为什么 tesseract 无法从这个简单的图像中读取文本?

    我在 pytesseract 上阅读了大量的帖子 但我无法让它从一个简单的图像中读取文本 它返回一个空字符串 这是图像 我尝试过缩放它 灰度化它 调整对比度 阈值 模糊 以及其他帖子中所说的一切 但我的问题是我不知道 OCR 想要更好地工作
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节
  • 将自定义属性添加到 Tk 小部件

    我的主要目标是向小部件添加隐藏标签或字符串之类的内容 以在其上保存简短信息 我想到创建一个新的自定义 Button 类 在本例中我需要按钮 它继承所有旧选项 这是代码 form tkinter import class NButton Bu

随机推荐

  • 使用 Automapper 中的 Profiles 将相同类型映射到不同逻辑

    我在 ASP NET MVC 网站中使用 AutoMapper 将数据库对象映射到 ViewModel 对象 并且尝试使用多个配置文件来映射相同的类型 但使用另一种逻辑 我有通过阅读来做到这一点的想法马特的博客文章 http mhinze
  • 将目录拆分为子模块

    我在这里进行了很好的搜索 但似乎没有任何东西可以回答我的问题 所以就这样吧 我有一个具有当前文件夹结构的 git 存储库 app folder app folder2 app bundles bundle1 app bundles bund
  • 如何使用 Python 查找 Windows 通用应用程序数据文件夹?

    我希望我的应用程序存储一些数据以供所有用户访问 使用Python 我怎样才能找到数据应该去哪里 如果您不想添加像 winpaths 这样的第三方模块的依赖项 我建议使用 Windows 中已有的环境变量 Windows 中有哪些可用的环境变
  • 根据某些条件登录到不同的文件

    我们有一个应用程序 其中我们有一个条件 根据条件 如果条件为真 那么我们会将一些日志消息写入一个文件 否则我们会将消息记录到另一个文件 并且日志记录应该根据条件而不是根据日志级别进行 dropwizard 如何使用 yaml 文件 这是开箱
  • 什么是 __NSArrayI 和 __NSArrayM?如何转换为NSArray?

    什么是 NSArrayI 和 NSArrayM NSArrayI 或M 导致 无法识别的选择器 错误 如何转换为NSArray 我做了测试来解析 json twitter api gt 工作正常 解析的对象是 NSCFDictionary
  • 用于删除 unbox_any 的抖动逻辑

    我正在调查此 C 代码的执行 public static void Test
  • 想要将网站密码加密从 SHA1 转换为 SHA256

    只是寻求一些建议 我有一个大约有 2500 名用户的网站 规模虽小但正在不断增长 我通过对密码使用 SHA1 加密来构建它 我已经了解到 SHA1 是不安全的 并且想更改为带有盐的 SHA256 有人对如何进行这样的过渡有任何建议吗 如果我
  • H2O 和 Scikit-Learn 指标评分之间有什么区别吗?

    我尝试使用H2O创建一些用于二元分类问题的机器学习模型 测试结果非常好 但后来我查了一下 发现了一些奇怪的事情 出于好奇 我尝试打印测试集模型的预测 我发现我的模型实际上一直预测为 0 负 但 AUC 在 0 65 左右 并且精度不是 0
  • Rails 7 注册表单不显示错误消息

    我正在关注一个导轨教程 https www learnenough com ruby on rails 6th edition tutorial sign up sec signup form 在注册表单中 如果提交了无效的用户信息 注册页
  • 如何向“ng-disabled”添加多个条件?

    我需要检查两个条件bothtrue 在启用按钮之前 这是一个例子
  • 将子 DIV 拉伸到父级的高度(没有硬编码高度)

    我有一个父级 DIV 和一个子级 DIV 我希望将其拉伸到父级的底部 目前还没有 尽管有height auto important 可以看到说明问题的屏幕截图here https i stack imgur com bJ4qt jpg 相关
  • 将选择的 GFS-ensemble openDAP 数据加载到内存中 (Python)

    我想通过 netCDF 和 xarray 从 OpenDAP 服务器下载 GFS 集合数据的子选择 但是 当尝试将子选择加载到内存中时 程序会在一段时间后崩溃并返回 RuntimeError netCDF I O 故障 我希望获取的数据点数
  • pylint 警告“例外:”

    对于这样的块 try some stuff except Exception pass pylint 引发警告 W0703 捕获 异常 为什么 通常不捕获根 Exception 对象 而是捕获更具体的对象 例如 IOException 这被
  • numpy 二进制光栅图像到多边形转换

    我想将 2d numpy 数组转换为多边形 性能对我来说非常重要 但我想避免进行 C 扩展 可以通过腐蚀来制作二值轮廓图像 然后我发现this https stackoverflow com questions 6282462 conver
  • 不再需要视图时取消事件委托的最佳方法

    打电话是一种不好的做法吗undelegateEvents 在视图中remove 方法 为什么骨干人员没有默认包含它 我意识到 当简单地重新初始化视图变量时 我陷入了很多绑定问题 虽然undelegateEvents 创建新视图时会自动调用
  • .Net 4.0 JSON序列化:双引号改为\"

    我正在使用 System Web Script Serialization JavaScriptSerializer 将字典对象序列化为 JSON 字符串 我需要将此 JSON 字符串发送到云端的 API 但是 当我们序列化它时 序列化程序
  • x86_64:IMUL 比 2x SHL + 2x ADD 更快吗?

    当查看 Visual Studio 2015U2 生成的程序集时 O2 发布 模式我看到这段 手工优化 的 C 代码被翻译回乘法 int64 t calc int64 t a return a lt lt 6 a lt lt 16 a 集会
  • Silverlight 项目 - 滑入和滑出面板 - 如何?

    我不知道这个功能到底是什么 但我想在我的 Silverlight 项目中模拟它 我是一名 C 开发人员 正在转向 Silverlight 和 Expression Studio Blend 以获得更丰富的用户体验 假设我有一些用户控件 并希
  • 如何创建循环百分比(处理)[c#]

    示例 做某事 9999 次 可能超过 for int i 1 i lt 9999 i do something label1 content 100 i 9999 我想在编译时显示 label1 上的循环百分比 我无法在几毫秒内执行任何操作
  • 如何使用 Numba 在 SciPy 中使用任意数量的变量和参数执行多重积分?

    我想用Numba修饰多重积分的被积函数 以便可以通过以下方式调用它SciPy Nquad功能作为低级可调用 理想情况下 装饰器应允许任意数量的变量以及来自 Nquad 的任意数量的附加参数args争论 这是建立在一个优秀的今年早些时候的问答