【发布时间】:2018-03-29 09:51:46
【问题描述】:
我正在尝试使用 Numba 优化对包含 Bessel 函数的函数的积分 (scipy.integrate.quad) 的评估。
虽然 Numba 似乎适用于“常见”numpy 函数,但当我尝试包含 Bessel 函数时它会引发错误:
Untyped global name 'jn': cannot determine Numba type of <class 'numpy.ufunc'>
通过谷歌搜索,我从 Numba 存储库中找到了一个 Jupyter 笔记本,其中讨论了创建 j0 函数 (https://github.com/numba/numba/blob/08d5c889491213288be0d5c7d726c4c34221c35b/examples/notebooks/j0%20in%20Numba.ipynb)。
在 numba 中创建该功能的笔记本电脑会很快,但它们最后显示的计时结果表明使用 numba 的性能降低了约 100 倍。我在这里遗漏了什么明显的东西吗?
更一般地说,是否有可能从 Numba 编译中受益于 scipy Bessel 函数?
【问题讨论】:
-
不是我的专业领域,但这些函数可能是相当优化的 fortran 代码,这可能是 numba 的麻烦来源(不确定)并且肯定会限制函数本身的优化。
-
看起来 scipy 函数在 C (github.com/scipy/scipy/tree/…) 中。我想如果 Numba 可以只使用这些文件中的代码会很棒,但是从网上大量阅读来看,我还没有找到解决方案!
标签: python optimization jit numba numpy-ufunc