我想看看numpy.random.exponential
是否使用F^{-1} (U)方法实现,其中F为指数分布的c.d.f, U为均匀分布。
我尝试numpy.source(random.exponential)
,但返回'此对象不可用'。这是否意味着这个函数不是用Python编写的?
我也尝试了inspect.getsource(random.exponential)
,但返回了一个错误,说它不是模块,函数等
numpy的源代码在github上,所以你可以使用github的源代码搜索。
通常,库的这些部分不是用纯python实现的。
python部分(关于你的问题)在这里:
更相关的代码部分来自distribution .c:
double rk_standard_exponential(rk_state *state)
{
/* We use -log(1-U) since U is [0, 1) */
return -log(1.0 - rk_double(state));
}
double rk_exponential(rk_state *state, double scale)
{
return scale * rk_standard_exponential(state);
}
很多numpy函数都是用C/c++和Fortran编写的。numpy.source()
只返回用Python编写的对象的源代码。它写在NumPy网站上。
你可以在它们的GitHub页面上找到所有的NumPy函数。你需要的一个是用c写的,这里是文件的链接。