gpt4 book ai didi

python - 贝塞尔函数(来自 scipy.special)可以与 Numba 一起使用吗

转载 作者:太空宇宙 更新时间:2023-11-03 14:42:09 25 4
gpt4 key购买 nike

我正在尝试使用 Numba 优化包含贝塞尔函数的函数的积分 (scipy.integrate.quad) 的计算。

虽然 Numba 似乎适用于“常见”numpy 函数,但当我尝试包含 Bessel 函数时,它会抛出错误:

Untyped global name 'jn': cannot determine Numba type of <class 'numpy.ufunc'>

通过 Google 搜索,我从 Numba 存储库中找到了一个 Jupyter 笔记本,其中讨论了如何创建 j0 函数 ( https://github.com/numba/numba/blob/08d5c889491213288be0d5c7d726c4c34221c35b/examples/notebooks/j0%20in%20Numba.ipynb )。

笔记本评论说,在 numba 中创建该函数会很快,但最后显示的计时结果表明 numba 的性能慢了约 100 倍。我在这里遗漏了一些明显的东西吗?

更一般地说,是否可以从 scipy Bessel 函数的 Numba 编译中受益?

最佳答案

通常 NumPy 和 SciPy 提供非常快的实现。另一方面,Numba 基于 Python 函数自动生成代码。

所以你不能将 numba 应用于除 Python 函数之外的任何东西,如果你想要 nopython 模式(如果你对速度感兴趣,你需要它),甚至不是每个 Python 函数。 Numba 仅支持非常有限的函数和类型。而且这些函数都是在 Numba 中重新实现的,它根本不使用 Python 或 NumPy 函数,即使看起来会使用!

因此,您拥有自动生成的 LLVM 代码与高度优化的定制 C/Fortran 代码。因此,您不应该期望获得任何东西(尽管与 NumPy/SciPy 函数相比,numba 通常对于非常小的数组表现出色 - 但即使对于中等大小的数组,numba 也会更慢)。

但是,如果您想在 numba jitted 函数中使用某些(当前不受支持的)函数,您必须自己重新实现它。除非在长紧循环中调用它,否则不值得麻烦,只需使用普通函数即可。开发人员时间通常比运行时重要得多。

这并不意味着 numba 不好。对于需要大量计算/循环且无法使用现有 NumPy 或 SciPy 函数实现的任务来说,它非常有用。

关于python - 贝塞尔函数(来自 scipy.special)可以与 Numba 一起使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46499816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com