在 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