簡體   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