【发布时间】:2021-09-30 03:09:39
【问题描述】:
我使用 Numba 来加速我的代码。它工作得很好,并提供了 2-3 倍的改进。然而,我的代码中花费的主要时间(大约 90%)是在 scipy quad 积分和插值(线性和三次样条)中。我做了几百次这些集成,所以我认为这是 Numba 可以提升的东西。 看起来 Numba 不支持这些?我听说 Numba-Scipy 可以让 Numba 识别 Scipy,但这似乎仍然不起作用。 有没有办法让 Numba 优化我的集成/插值?
【问题讨论】:
-
您能提供到目前为止您尝试过的内容以及遇到的错误吗?
-
scipy是一组未连接的包。最后,我查看了numba-scipy,只“知道”了“特殊功能”模块。quad基本上是一个迭代函数,多次调用你的函数(至少 20 次)。您可以通过使您的功能尽可能快来提高其速度,但除此之外您无能为力。一些集成/优化函数已经编译了组件,但它们仍然受到调用您自己的函数所需时间的限制。没有人编译你的代码或将整个过程变成一个编译包。 -
请提供一个实际输入的工作示例(可能是随机数)。通常要走的路是创建一个 LowLevel callable,它提供了显着的加速。但是开箱即用不支持线性或三次样条类。如果只是对样条曲线的评估,这应该可以在 Numba 中实现。替代方案是 C 或 Cython 中的 LowLevel Callables,但存在相同的问题。例如。使用 np.interpolate 和低级可调用对象的示例。 stackoverflow.com/a/58561573/4045774
标签: python scipy integration interpolation numba