首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用nopython模式从numba调用math.factorial?

如何用nopython模式从numba调用math.factorial?
EN

Stack Overflow用户
提问于 2020-05-28 02:33:50
回答 1查看 312关注 0票数 1

我需要在for循环中计算大整数的阶乘,我想用numba编译它。Python的数学模块中的factorial函数看起来速度很快。如何使用nopython模式从numba调用此函数?不幸的是,numba当前的https://numba.pydata.org/numba-doc/0.17.0/reference/pysupported.html不支持这个函数。

代码语言:javascript
复制
import math
from numba import njit

@njit
def factorial(n):
    return math.factorial(n)

factorial(2)

抛出一个TypingError:

TypingError: Failed in nopython mode pipeline (step: nopython frontend) Unknown attribute 'factorial' of type Module(<module 'math' from '/anaconda3/envs/minimalcondaforge/lib/python3.8/lib-dynload/math.cpython-38-darwin.so'>)

有什么办法叫这个函数吗?我是否可以像这里描述的那样使用@overloadget_cython_function_addresshttp://numba.pydata.org/numba-doc/latest/extending/high-level.html?(到目前为止,我还没能把它做好,我对南巴还是新手,所以我可能做得不对。)对于numba中的快速阶乘函数也是开放的,但是它需要能够处理大整数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-28 14:03:34

Numba无法编译Python的任意精度整数,因此如果您想要找到大于20⁠的整数的确切阶乘值(在2432902008176640000是最适合64位整数⁠的整数),那么Numba将不幸没有帮助。

如果不需要大阶乘的确切整数,那么可以将阶乘函数定义为等效的math.gamma(n+1),它在Numba下编译并具有浮点输出。尽管如此,这也只适用于170!,它是最大的,可以容纳64位浮点数。

没有任意精度的数字,更大的阶乘需要用日志形式表示.为此,您可以使用math.lgamma(n+1),它也在Numba下编译,并且可以返回非常高n的log(n!)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62056035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档