有没有办法直接或间接调用可在此处https://github.com/scipy/scipy/tree/master/scipy/special/cdflib找到的Fortran例程,scipy.stats
使用的函数应由numba
编译的函数使用在nopython
模式下?
具体来说,因为scipy.stats.norm.cdf()
在某种程度上相当慢,所以我现在直接使用前者调用的scipy.special.ndtr
。但是,我正在循环中执行此操作,我打算使用numba
加快速度。
答案 0 :(得分:2)
我将看看rvlib,它使用Numba和CFFI来调用RMath,这是R用来计算统计分布的独立C库。它提供的功能应该由Numba以nopython
模式调用。查看README以获取与scipy.stats.norm.cdf()
如果您仍然有兴趣自己包装cdflib
,我建议您使用CFFI。您必须为所需的功能构建C接口。您可能会发现我写的这篇博文有助于您入门:
https://www.continuum.io/blog/developer-blog/calling-c-libraries-numba-using-cffi
答案 1 :(得分:1)
如果仅需要普通CDF,则可以使用标准库的erfc
模块中的math
函数来实现它。
import numba
from math import erfc, sqrt
SQRT2 = sqrt(2.0)
@numba.jit(nopython=True)
def normcdf(x):
# If X ~ N(0,1), returns P(X < x).
return erfc(-x / SQRT2) / 2.0
您可能可以使用numba.vectorize
而不是numba.jit
将其向量化。