scipy.special 中新增向量化 ufunc#

special 中的許多函式是純量函式的向量化版本。純量函式是手動編寫的,而向量化所需的迴圈是自動產生的。本節討論新增向量化特殊函式所需的步驟。

新增向量化函式的第一步是編寫對應的純量函式。這可以使用 Cython、C、C++ 或 Fortran 完成。如果從頭開始,則應優先選擇 Cython,因為對於僅熟悉 Python 的開發人員來說,程式碼更易於維護。如果主要程式碼是用 Fortran 寫成的,則需要圍繞該程式碼編寫 C 語言包裝器;有關此類包裝器的範例,請參閱 specfun_wrappers.c

實作純量函式後,透過將條目新增至 functions.json 來註冊新函式。generate_ufuncs.py 中的 docstring 解釋了格式。另請透過將條目新增至 add_newdocs.py 來為新函式新增文件;在檔案中尋找範例。

在為 ufunc 編寫文件中的參數章節時,引數的類型應為 array_like。關於引數是否可以為實數或複數值的討論應保留在描述中。因此,舉例來說,如果我們要記錄 Gamma 函式的參數,它應該看起來像這樣

Parameters
----------
z : array_like
    Real or complex valued argument

在記錄傳回值章節時,傳回值的類型應為 scalar or ndarray,因為當 ufunc 收到純量作為引數時,會傳回純量。另請記住,為傳回值提供 name 是可選的,而且對於特殊函式通常沒有幫助。因此,對於 Gamma 函式,我們可能會得到類似這樣的內容

Returns
-------
scalar or ndarray
    Values of the Gamma function