在中调用Fortran例程西皮。特别在一个因麻木而颤抖的功能中

2024-04-25 19:14:44 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以直接或间接地调用https://github.com/scipy/scipy/tree/master/scipy/special/cdflib中可以找到的Fortran例程,scipy.stats所使用的函数应该是numbanopython模式下编译的?在

具体地说,因为scipy.stats.norm.cdf()相当慢,所以我现在直接使用scipy.special.ndtr,它由前者调用。但是,我是在一个循环中执行此操作,我的目的是使用numba来加速它。在


Tags: 方法函数httpsgithubmastercomtreestats
2条回答

如果您只需要普通的CDF,那么可以使用标准库的math模块中的erfc函数来实现它。在

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来矢量化它。在

我来看看rvlib,它使用Numba和CFFI调用RMath,这是R用来计算统计分布的独立C库。它提供的函数应该可以由Numba在nopython模式下调用。请看自述文件中的函数示例,该函数相当于scipy.stats.norm.cdf()

如果您仍然对自己包装cdflib感兴趣,我建议您使用CFFI。你必须为你想要的函数建立一个C接口。你可能会发现我写的这篇博文对入门很有帮助:

https://www.continuum.io/blog/developer-blog/calling-c-libraries-numba-using-cffi

相关问题 更多 >

    热门问题