python - 如何将几个附加参数传递给作为 LowLevelCallable 传递给 scipy.integrate.quad 的 numba cfunc
问题描述
我正在尝试将所选答案的第 1 段中描述的技术复制到另一个问题:如何将附加参数传递给 numba cfunc 作为 LowLevelCallable 传递给 scipy.integrate.quad。
但是,我不知道如何修改实现,以便 xx[1] 是一个浮点数组,而不是一个唯一的浮点数。
解决方案
我通过将Jacques Gaudin在https://stackoverflow.com/a/49732825/3925704中的代码修改为:
import numpy as np
import scipy.integrate as si
import numba
from numba import cfunc
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):
t = args[0]
a = args[1]
return np.exp(-t/a) / t**2
def do_integrate(func, a):
"""
Integrate the given function from 1.0 to +inf with additional argument a.
"""
return si.quad(func, 1, np.inf, args=(a,))
推荐阅读
- python - tkinter 中是否有循环浏览窗口的功能
- html - 如何应用不同的样式
- 在同一
- 父元素?
- 在同一
- reactjs - React Recoil useRecoilValue 正在返回一个空原子
- excel - 枢轴返回源数据中显示的实际评级值
- sql - 从命令行使用 sqlplus 更新行挂起(linux bash)
- jq - jq从json数组中提取两个字段
- xcode - 如何在 UI 测试中使用 SKTestSession?Xcode 12 通用
- excel - 将某个值复制到定义的工作表中的不同位置
- ios - 如何在钥匙串中保存应用购买状态
- node.js - 无法在 Google Cloud Platform 中更新构建?