[英]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.