scipy.special 中添加向量化 ufunc#

special 中的许多函数是标量函数的向量化版本。标量函数由手工编写,向量化所需的循环会自动生成。本节讨论添加新的向量化特殊函数所需的步骤。

添加新的向量化函数的第一个步骤是编写相应的标量函数。这可以使用 Cython、C、C++ 或 Fortran 完成。如果从头开始,则应优先选择 Cython,因为代码更易于维护,尤其对于仅熟悉 Python 的开发人员而言。如果主要代码是 Fortran,则需要围绕代码编写 C 包装器;有关此类包装器的示例,请参阅 specfun_wrappers.c

实现标量函数后,通过在 functions.json 中添加条目来注册新函数。 generate_ufuncs.py 中的文档字符串解释了格式。 此外,通过在 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