相关疑难解决方法(0)

如何将附加参数传递给作为LowLevelCallable传递给nipa cfunc的scipy.integrate.quad

该文档讨论了使用numba的cfuncs作为LowLevelCallable参数scipy.integrate.quad.我需要额外的参数相同的东西.

我基本上试图做这样的事情:

import numpy as np
from numba import cfunc
import numba.types
voidp = numba.types.voidptr
def integrand(t, params):
    a = params[0] # this is additional parameter
    return np.exp(-t/a) / t**2
nb_integrand = cfunc(numba.float32(numba.float32, voidp))(integrand)
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,因为params它们应该是voidptr/ void*并且它们无法转换为double.我有以下错误消息:

TypingError: Failed at nopython (nopython frontend)
Invalid usage of getitem with parameters (void*, int64)
 * parameterized
Run Code Online (Sandbox Code Playgroud)

我没有找到任何关于如何从void*Numba中提取值的信息.在C中,应该是这样的a = *((double*) params)- 在Numba中可以做同样的事情吗?

python scipy numba

12
推荐指数
1
解决办法
822
查看次数

是否可以从 C/C++ 调用 numba jited 函数?

我想在 python 中接口 C++ 库,它将函数指针作为参数。我看起来可以在 C 中使用 进行调用PyEval_CallObject,但要进一步进行,我需要正确的签名(输入和输出参数的类型)。是否可以从具有指定签名的python返回回调?

另外我有点担心性能,所以我也查看了numba编译python函数的python项目。如果可以在 C/C++ 中访问它以提高性能,我很感兴趣。

c c++ python numba

5
推荐指数
1
解决办法
533
查看次数

如何将数组指针传递给 Numba 函数?

我想创建一个 Numba 编译的函数,它将指针或数组的内存地址作为参数并对其进行计算,例如修改基础数据。

用于说明这一点的纯 python 版本如下所示:

import ctypes
import numba as nb
import numpy as np

arr = np.arange(5).astype(np.double)  # create arbitrary numpy array


def modify_data(addr):
    """ a function taking the memory address of an array to modify it """
    ptr = ctypes.c_void_p(addr)
    data = nb.carray(ptr, arr.shape, dtype=arr.dtype)
    data += 2

addr = arr.ctypes.data
modify_data(addr)
arr
# >>> array([2., 3., 4., 5., 6.])
Run Code Online (Sandbox Code Playgroud)

正如您在示例中看到的,数组arr已被修改,但未将其显式传递给函数。在我的用例中,数组的形状和数据类型是已知的,并且始终保持不变,这应该简化界面。

1.尝试:天真的抖动

我现在尝试编译该modify_data函数,但失败了。我的第一次尝试是使用

shape = arr.shape
dtype = arr.dtype

@nb.njit
def modify_data_nb(ptr):
    data …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy numba

4
推荐指数
1
解决办法
2157
查看次数

用于 SciPy 集成和插值的 Numba

我使用 Numba 来加速我的代码。它效果很好,可提供 2-3 倍的改进。然而,我的代码中花费的主要时间(大约 90%)是在 scipy 四边形积分和插值(线性和三次样条)上。我进行了数百次这些集成,因此我认为这是 Numba 可以增强的功能。看起来 Numba 不支持这些?我听说过 Numba-Scipy ,它应该让 Numba 识别 Scipy,但这似乎仍然不起作用。有没有办法让 Numba 优化我的积分/插值?

python integration interpolation scipy numba

1
推荐指数
1
解决办法
1460
查看次数

标签 统计

numba ×4

python ×4

scipy ×2

arrays ×1

c ×1

c++ ×1

integration ×1

interpolation ×1

numpy ×1