繁体   English   中英

Numpy / Scipy如何将C函数转换为矢量化Python函数?

[英]How does Numpy/Scipy turn C functions into vectorized Python functions?

据我了解,矢量化的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)

int k,n;

双p;

似乎底层的C函数不能在数组上运行,并且我找不到该函数转换为可在数组上运行的Python函数的源代码。

对于scipy.special函数,C代码仅包含函数的“内核”,即,如何将函数应用于标量。 然后这些各个被包裹成ufunc与自动生成用Cython代码。 为此,它使用C头文件,例如scipy/special/cephes.h ; Cython声明文件,例如scipy/special/_cephes.pxd ;文件scipy/special/functions.json ,其中将生成所有函数列出scipy.special ,最后列出scipy/special/_generate_pyx.py ,这是实际生成Cython代码的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM