custom_model#
- astropy.modeling.custom_model(*args, fit_deriv=None)[源代码]#
从用户定义函数创建模型。模型的输入和参数将从函数的参数中推断出来。
它既可以用作函数,也可以用作装饰器。这两种用法的例子见下文。
只有当只有一个输入时,模型才是可分的。
备注
所有模型参数都必须定义为关键字参数,并在模型函数中使用默认值。使用
None
如果不希望该参数有默认值,则将其作为默认参数值。默认情况下,可以使用与属性名称匹配的关键字参数来配置标准的可设置模型属性;但是,这些值不会设置为模型“参数”。此外,用户不能使用与不可设置的模型属性匹配的关键字参数,但
n_outputs
它应该设置为函数的输出数。- 参数:
- func : functionPYTHON:函数
定义模型的函数。它应该有N个位置参数,其中
N
是模型的维度(模型中独立变量的数量)和任意数量的关键字参数(参数)。它必须返回模型的值(通常作为数组,但也可以是标量输入的标量)。这对应于evaluate
方法。- fit_deriv : function ,可选Python:函数,可选
定义模型雅可比导数的函数。一、 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