在中添加矢量化的ufunction scipy.special

中的许多函数 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