首页 > 解决方案 > Numpy/Scipy 如何将 C 函数转换为向量化 Python 函数?

问题描述

据我了解,向量化的 numpy 函数比 Python 循环更快,因为循环是在 C 或 Fortran 中完成的。我想知道这发生在源代码的哪个位置。

例如,scipy.special.bdtr二项式 CDF 函数接受类似数组的参数k,n,p,如果参数是可广播的,它将返回一个 ndarray。文档说这scipy.special.bdtr是 Cephes 数学函数库中例程的包装器。在 Github 上挖掘源代码,我找到了一个scipy/special/cephes/bdtr.c包含例程的 C 代码的文件;以下是我认为是相关 C 函数的前三行:

双 bdtr(k, n, p)

整数 k, n;

双p;

似乎底层的 C 函数不对数组进行操作,而且我找不到将这个函数转换为对数组进行操作的 Python 函数的源代码。

标签: pythoncnumpyscipyvectorization

解决方案


scipy.special函数的情况下,C 代码只包含函数的“内核”,即如何将函数应用于标量。然后将这些中的每一个包装到一个ufunc自动生成的Cython代码中。为此,它使用 C 头文件,如scipy/special/cephes.hCython 声明文件,如scipy/special/_cephes.pxd文件,其中列出scipy/special/functions.json了要为其生成的所有函数,最后是实际生成 Cython 代码的地方。scipy.specialscipy/special/_generate_pyx.py


推荐阅读