在与numba一起使用的函数中调用scipy.special中的Fortran例程

时间:2016-09-09 08:53:24

标签: python numba

有没有办法直接或间接调用可在此处https://github.com/scipy/scipy/tree/master/scipy/special/cdflib找到的Fortran例程,scipy.stats使用的函数应由numba编译的函数使用在nopython模式下?

具体来说,因为scipy.stats.norm.cdf()在某种程度上相当慢,所以我现在直接使用前者调用的scipy.special.ndtr。但是,我正在循环中执行此操作,我打算使用numba加快速度。

2 个答案:

答案 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将其向量化。