在 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