scipy.special 中添加矢量化 ufuncs#

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

添加新矢量化函数的第一步是编写相应的标量函数。这可以在 Cython、C、C++ 或 Fortran 中完成。如果从头开始,则应首选 Cython,因为对于只熟悉 Python 的开发人员来说,代码更容易维护。如果主要代码是 Fortran 编写的,则需要在代码周围编写一个 C 包装器;有关此类包装器的示例,请参见 specfun_wrappers.c

在实现标量函数后,通过在 functions.json 中添加一个条目来注册新函数。generate_ufuncs.py 中的文档字符串解释了格式。同时,通过在 add_newdocs.py 中添加一个条目来为新函数添加文档;在文件中查找示例。

在为ufuncs编写文档的参数部分时,参数的类型应为 array_like 。关于参数是否可以是例如实数或复数值的讨论应保留在描述中。因此,例如,如果我们为Gamma函数编写参数文档,那么它应该看起来像这样:

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

在记录返回部分时,返回值的类型应为 scalar or ndarray,因为当给定标量作为参数时,ufuncs 返回标量。还要记住,为返回值提供 name 是可选的,实际上对于特殊函数来说通常没有帮助。因此,对于 Gamma 函数,我们可能会有类似这样的内容:

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