custom_model

astropy.modeling.custom_model(*args, fit_deriv=None, **kwargs)[源代码]

从用户定义函数创建模型。模型的输入和参数将从函数的参数中推断出来。

它既可以用作函数,也可以用作装饰器。这两种用法的例子见下文。

注解

所有模型参数都必须定义为关键字参数,并在模型函数中使用默认值。使用 None 如果不希望该参数有默认值,则将其作为默认参数值。

参数
func功能

定义模型的函数。它应该有N个位置参数,其中 N 是模型的维度(模型中独立变量的数量)和任意数量的关键字参数(参数)。它必须返回模型的值(通常作为数组,但也可以是标量输入的标量)。这对应于 evaluate 方法。

fit_deriv功能,可选

定义模型雅可比导数的函数。一、 e,关于 参数 模型的。它应该具有与 func ,但应返回一个序列,其中序列的每个元素都是相对于相应参数的导数。这对应于 fit_deriv() 方法。

实例

将正弦模型函数定义为自定义1D模型:

>>> from astropy.modeling.models import custom_model
>>> import numpy as np
>>> def sine_model(x, amplitude=1., frequency=1.):
...     return amplitude * np.sin(2 * np.pi * frequency * x)
>>> def sine_deriv(x, amplitude=1., frequency=1.):
...     return 2 * np.pi * amplitude * np.cos(2 * np.pi * frequency * x)
>>> SineModel = custom_model(sine_model, fit_deriv=sine_deriv)

创建自定义模型的实例并对其求值:

>>> model = SineModel()
>>> model(0.25)
1.0

这个模型实例现在可以像普通的astropy模型一样使用。

下一个例子演示了一个2D Moffat函数模型,还演示了对docstring的支持(这个例子也可以包含一个派生的,但是为了简单起见省略了):

>>> @custom_model
... def Moffat2D(x, y, amplitude=1.0, x_0=0.0, y_0=0.0, gamma=1.0,
...            alpha=1.0):
...     """Two dimensional Moffat function."""
...     rr_gg = ((x - x_0) ** 2 + (y - y_0) ** 2) / gamma ** 2
...     return amplitude * (1 + rr_gg) ** (-alpha)
...
>>> print(Moffat2D.__doc__)
Two dimensional Moffat function.
>>> model = Moffat2D()
>>> model(1, 1)  
0.3333333333333333