模型#
- class astropy.modeling.Model(*args, meta=None, name=None, **kwargs)[源代码]#
基类:
object
所有模型的基类。
这是一个抽象类,不应直接实例化。
默认情况下,以下初始化参数适用于大多数模型子类(异常包括特殊实用程序模型,如
Mapping
). 参数化模型将其所有参数作为参数,后跟以下任意可选关键字参数:- 参数:
- name :
str
,可选Python:字符串,可选 与此模型实例关联的人类友好名称(特别适用于标识复合模型的各个组件)。
- meta :
dict
,可选Python:Dict,可选 附加到此模型的用户定义元数据的可选dict。如何使用和解释这取决于用户或单个用例。
- n_models :
int
,可选PYTHON:int,可选 如果给定一个大于1的整数,则 模型集 是实例化的,而不是单个模型。这会影响参数参数的解释方式。在这种情况下,每个参数都必须以列表或数组的形式给出——该数组的元素沿着第一个轴(或
model_set_axis
如果指定),则第n个元素是集合中第n个模型的该参数的值。有关更多详细信息,请参阅文档中有关模型集的部分。
- model_set_axis :
int
,可选PYTHON:int,可选 只在创建模型时应用。
n_models > 1
). 它改变了参数值的解释方式。通常,每个输入参数数组的第一个轴(正确地说是第0个轴)作为与模型集相对应的轴。然而,输入阵列的任何轴都可以被视为这个“模型集轴”。这也接受负整数——例如使用model_set_axis=-1
如果最后一个(变化最快)轴应与模型集相关联。也,model_set_axis=False
可用于指示应使用给定的输入来评估模型集中的所有模型。- fixed :
dict
,可选Python:Dict,可选 词典
{{parameter_name: bool}}
为一个或多个参数设置固定约束。True
表示参数在拟合过程中保持不变,并且在创建模型实例后阻止更新。或者
fixed
属性可用于锁定或解锁单个参数。- tied :
dict
,可选Python:Dict,可选 词典
{{parameter_name: callable}}
链接到其他参数的参数。字典值是提供链接关系的可调用项。或者
tied
属性可用于设置tied
对单个参数的约束。- bounds :
dict
,可选Python:Dict,可选 字典
{{parameter_name: value}}
参数的上下界。键是参数名。值是一个长度为2的列表或元组,为参数提供所需的范围。或者
min
和max
或者~astropy.modeling.Parameter.bounds`参数的属性可用于设置单个参数的边界。- eqcons :
list
,可选Python:列表,可选 这个函数的长度
eqcons[j](x0, *args) == 0.0
在一个成功优化的问题中。- ineqcons :
list
,可选Python:列表,可选 这个函数的长度
ieqcons[j](x0, *args) >= 0.0
是一个成功优化的问题。
- name :
实例
>>> from astropy.modeling import models >>> def tie_center(model): ... mean = 50 * model.stddev ... return mean >>> tied_parameters = {'mean': tie_center}
具体说明
'mean'
是两种方式之一的绑定参数:>>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3, ... tied=tied_parameters)
或
>>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3) >>> g1.mean.tied False >>> g1.mean.tied = tie_center >>> g1.mean.tied <function tie_center at 0x...>
固定参数:
>>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3, ... fixed={'stddev': True}) >>> g1.stddev.fixed True
或
>>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3) >>> g1.stddev.fixed False >>> g1.stddev.fixed = True >>> g1.stddev.fixed True
属性摘要
A
tuple
长度的n_inputs
定义边界框限制或升高NotImplementedError
表示没有边界框。A
dict
将参数名映射到它们的上下界(min, max)
元组或[min, max]
列表。装配工应设置协方差矩阵(如果可用)。
参数相等约束列表。
A
dict
将参数名称映射到其固定约束。一个标志,指示用户是否已通过赋值给此模型指定自定义边界框
model.bounding_box
.一种标志,指示用户是否通过赋值给该模型指定了自定义逆模型
model.inverse
.参数不等式约束列表。
此属性用于指示evaluate方法所需的单元或单元集,并返回将输入映射到单元(或
None
如果接受任何单位)。允许无量纲输入(和相应的输出)。
对要评估的输入执行严格的单位。
返回新的
Model
执行反变换的实例,如果为此模型定义了解析逆。一个类似dict的对象,用于存储可选信息。
主要出于信息目的,这些是约束模型评估的约束类型。
模型集轴的索引--即参数数组的轴,该轴属于参数值所属的模型--在模型初始化时指定。
输入的数目。
输出的数目。
返回单个模型中组件的数量,显然是1。
用户为此模型实例提供的名称。
描述此类型模型的参数的名称。
以pset形式返回参数。
主要是为了提供信息,这些是可以对模型参数设置的约束类型。
所有参数集中所有参数值的展平数组。
此属性用于指示evaluate的输出应包含哪些单元或单元集,并返回将输出映射到单元(或)的字典
None
如果接受任何单位)。指示模型是否可分离的标志。
参数的标准偏差,如果协方差矩阵可用。
这是一个布尔属性,指示访问约束是否自动检查构成模型的当前值。
A
dict
将参数名称映射到它们的绑定约束。如果此模型是用
Quantity
对象或如果没有参数。方法总结
__call__
(*args, **kwargs)使用给定的输入和实例化模型时指定的参数值评估此模型。
coerce_units
([input_units, return_units, ...])将单位附加到此(无单位)模型。
copy
\()返回此模型的副本。
deepcopy
\()返回此模型的深层副本。
evaluate
(*args, **kwargs)在一些输入变量上评估模型。
get_bounding_box
([with_bbox])返回
bounding_box
模型(如果存在)或None
否则的话。has_inverse
\()如果模型定义了分析或用户反转,则返回True。
input_shape
\(输入)获取边界框求值的输入形状。
output_units
(**kwargs)在给定适合输入和输出的字典的情况下,返回此模型的输出单位字典。
prepare_inputs
(*inputs[, model_set_axis, ...])此方法用于
__call__
确保模型的所有输入都可以广播到兼容的形状中(如果其中一个或两个都作为数组输入),特别是在有多个参数集的情况下。prepare_outputs
(broadcasted_shapes, ...)rename
([name, inputs, outputs])使用新名称返回此模型的副本。
render
([out, coords])在固定位置评估模型,考虑
bounding_box
.set_slice_args
(*args)sum_of_implicit_terms
(*args, **kwargs)计算一些输入变量上任何隐式模型项的和。
with_units_from_data
(**kwargs)返回模型的实例,该实例的参数值与指定的数据单位兼容。
without_units_for_data
(**kwargs)返回一个模型实例,其中的参数值已转换为数据的正确单位,然后单位已被剥离。
属性文档
- bbox_with_units#
- bounding_box#
A
tuple
长度的n_inputs
定义边界框限制或升高NotImplementedError
表示没有边界框。默认限制由
bounding_box
在特定模型的类体中定义的属性或方法。如果未定义,则此属性将引发NotImplementedError
默认情况下(但可以由用户分配自定义值)。bounding_box
可以手动设置为类似数组的形状对象(model.n_inputs, 2)
。有关更多用法,请参见 基于边界盒的高效模型渲染这些限制是根据
numpy
'C'
索引约定,与模型输入顺序相反,例如用于输入('x', 'y', 'z')
,bounding_box
被定义为:对于1D:
(x_low, x_high)
对于2D:
((y_low, y_high), (x_low, x_high))
对于3D:
((z_low, z_high), (y_low, y_high), (x_low, x_high))
实例
设置
bounding_box
一维和二维模型的限制:>>> from astropy.modeling.models import Gaussian1D, Gaussian2D >>> model_1d = Gaussian1D() >>> model_2d = Gaussian2D(x_stddev=1, y_stddev=1) >>> model_1d.bounding_box = (-5, 5) >>> model_2d.bounding_box = ((-6, 6), (-5, 5))
为用户定义的3D设置边界框限制
custom_model
:>>> from astropy.modeling.models import custom_model >>> def const3d(x, y, z, amp=1): ... return amp ... >>> Const3D = custom_model(const3d) >>> model_3d = Const3D() >>> model_3d.bounding_box = ((-6, 6), (-5, 5), (-4, 4))
重置
bounding_box
只需删除用户定义的值,就可以将其重置为在类上定义的默认值:>>> del model_1d.bounding_box
要完全禁用边界框(包括默认值),请设置
bounding_box
到None
:>>> model_1d.bounding_box = None >>> model_1d.bounding_box Traceback (most recent call last): NotImplementedError: No bounding box is defined for this model (note: the bounding box was explicitly disabled for this model; use `del model.bounding_box` to restore the default bounding box, if one is defined for this model).
- bounds#
A
dict
将参数名映射到它们的上下界(min, max)
元组或[min, max]
列表。
- cov_matrix#
装配工应设置协方差矩阵(如果可用)。
- eqcons#
参数相等约束列表。
- fittable = False#
- fixed#
A
dict
将参数名称映射到其固定约束。
- has_user_bounding_box#
一个标志,指示用户是否已通过赋值给此模型指定自定义边界框
model.bounding_box
.
- has_user_inverse#
一种标志,指示用户是否通过赋值给该模型指定了自定义逆模型
model.inverse
.
- ineqcons#
参数不等式约束列表。
- input_units#
此属性用于指示evaluate方法所需的单元或单元集,并返回将输入映射到单元(或
None
如果接受任何单位)。模型子类还可以在evaluate中使用函数注释来指示有效的输入单元,在这种情况下,不应重写此属性,因为它将基于注释返回输入单元。
- input_units_allow_dimensionless#
允许无量纲输入(和相应的输出)。如果为真,则要计算的输入值将获得input_units中指定的单位。如果这是一个字典,那么它应该将输入名称映射到bool,以允许该输入使用无量纲数字。只有在定义了输入单位时才有效。
- input_units_equivalencies = None#
- input_units_strict#
对要评估的输入执行严格的单位。如果设置为True,则要计算的输入值将使用input_units指定的精确单位。如果输入量可转换为输入单位,则会进行转换。如果这是一个字典,那么它应该将输入名称映射到bool,以便为该参数设置严格的输入单位。
- inputs#
- inverse#
返回新的
Model
执行反变换的实例,如果为此模型定义了解析逆。即使在没有定义逆的模型上,也可以使用手动定义的逆函数来设置此属性,例如预先计算或实验确定的逆(通常以
PolynomialModel
,但不是按要求)。自定义反转可以用
del model.inverse
. 在这种情况下,如果存在默认值(否则默认值为“升高”),则模型的反向值将重置为其默认值NotImplementedError
)作者须知
Model
子类:要为一个模型定义一个逆,只需重写这个属性以返回代表逆的适当模型。基类将自动添加反向手动重写的机制。
- linear = True#
- meta = None#
一个类似dict的对象,用于存储可选信息。
- model_constraints = ('eqcons', 'ineqcons')#
主要出于信息目的,这些是约束模型评估的约束类型。
- n_inputs#
输入的数目。
- n_outputs#
输出的数目。
- n_submodels#
返回单个模型中组件的数量,显然是1。
- name#
用户为此模型实例提供的名称。
- outputs#
- param_names = ()#
描述此类型模型的参数的名称。
此元组中的参数与初始化特定类型的模型时应传入的顺序相同。某些类型的模型,如多项式模型,根据模型的某些其他属性(如阶数)有不同数量的参数。
定义自定义模型类时,此属性的值由
Parameter
在类中定义的body属性。
- param_sets#
以pset形式返回参数。
这是一个每个参数集有一个项目的列表,它是一个跨越所有参数集的该参数值的数组,最后一个轴与该参数集关联。
- parameter_constraints = ('fixed', 'tied', 'bounds')#
主要是为了提供信息,这些是可以对模型参数设置的约束类型。
- parameters#
所有参数集中所有参数值的展平数组。
装配参数维护此列表,装配工对其进行修改。
- return_units#
此属性用于指示evaluate的输出应包含哪些单元或单元集,并返回将输出映射到单元(或)的字典
None
如果接受任何单位)。模型子类还可以在evaluate中使用函数注释来指示有效的输出单位,在这种情况下,不应重写此属性,因为它将基于注释返回返回单位。
- separable#
指示模型是否可分离的标志。
- standard_broadcasting = True#
- stds#
参数的标准偏差,如果协方差矩阵可用。
- sync_constraints#
这是一个布尔属性,指示访问约束是否自动检查构成模型的当前值。创建模型时,该默认值为True,但出于拟合目的,出于性能原因,应将其设置为False。
- tied#
A
dict
将参数名称映射到它们的绑定约束。
方法文件
- coerce_units(input_units=None, return_units=None, input_units_equivalencies=None, input_units_allow_dimensionless=False)[源代码]#
将单位附加到此(无单位)模型。
- 参数:
- input_units :
dict
或tuple
,可选PYTHON:DICT或PYTHON:元组,可选 要附加的输入单位。如果是dict,则每个键都是模型输入的名称,值是要附加的单位。如果是元组,则元素是要按照与
Model.inputs
.- return_units :
dict
或tuple
,可选PYTHON:DICT或PYTHON:元组,可选 要附加的输出单元。如果是dict,则每个键都是模型输出的名称,值是要附加的单位。如果是元组,则元素是要按照与
Model.outputs
.- input_units_equivalencies :
dict
,可选Python:Dict,可选 应用于输入值的默认等效值。如果设置,这应该是一个字典,其中每个键都是一个字符串,对应于一个模型输入。
- input_units_allow_dimensionless : bool 或
dict
,可选Bool或python:dict,可选 允许无量纲输入。如果为真,则要计算的输入值将获得input_units中指定的单位。如果这是一个字典,那么它应该将输入名称映射到bool,以允许该输入使用无量纲数字。
- input_units :
- 返回:
CompoundModel
A
CompoundModel
由当前型号plus组成UnitsMapping
连接装置的型号。
- 加薪:
ValueError
如果当前模型已经有单位。
实例
包装无单位模型以要求和转换单位:
>>> from astropy.modeling.models import Polynomial1D >>> from astropy import units as u >>> poly = Polynomial1D(1, c0=1, c1=2) >>> model = poly.coerce_units((u.m,), (u.s,)) >>> model(u.Quantity(10, u.m)) <Quantity 21. s> >>> model(u.Quantity(1000, u.cm)) <Quantity 21. s> >>> model(u.Quantity(10, u.cm)) <Quantity 1.2 s>
包装无单位模型但仍允许无单位输入:
>>> from astropy.modeling.models import Polynomial1D >>> from astropy import units as u >>> poly = Polynomial1D(1, c0=1, c1=2) >>> model = poly.coerce_units((u.m,), (u.s,), input_units_allow_dimensionless=True) >>> model(u.Quantity(10, u.m)) <Quantity 21. s> >>> model(10) <Quantity 21. s>
- get_bounding_box(with_bbox=True)[源代码]#
返回
bounding_box
模型(如果存在)或None
否则的话。- 参数:
- with_bbox
它的价值在于
with_bounding_box
调用模型时的关键字参数。缺省值为True
用于查找模型时的用法bounding_box
没有出错的风险。
- output_units(**kwargs)[源代码]#
在给定适合输入和输出的字典的情况下,返回此模型的输出单位字典。
输入和输出数量对象应作为关键字参数给定。
笔记
为了能够用参数中的单位拟合模型,需要使用这种方法,因为在拟合过程中,我们需要暂时从模型中去除单元(这可能是通过scipy函数完成的)。
这种方法将强制进行额外的模型评估,这可能会导致计算代价高昂。要避免这种情况,可以向模型添加Return_Units属性,请参见 return_units 。
- prepare_inputs(*inputs, model_set_axis=None, equivalencies=None, **kwargs)[源代码]#
此方法用于
__call__
确保模型的所有输入都可以广播到兼容的形状中(如果其中一个或两个都作为数组输入),特别是在有多个参数集的情况下。这还可以确保(如果适用)输入的单位与evaluate方法兼容。
- render(out=None, coords=None)[源代码]#
在固定位置评估模型,考虑
bounding_box
.与直接评估模型相关的关键区别在于,如果
Model.bounding_box
属性已设置。- 参数:
- out :
numpy.ndarray
可选努比·恩达雷,可选 将向其添加计算模型的数组。如果这不是
None
),将创建一个新数组。- coords : array_like ,可选NumPy:ARRAY_LIKE,可选
用于将模型的输入坐标转换为
out
数组。它应该具有self(coords)
产生的形状与out
. 如果out
未指定,coords
将用于确定返回数组的形状。如果没有提供(或没有),则将在由Model.bounding_box
.
- out :
- 返回:
- out :
numpy.ndarray
numpy.ndarray
模型添加到
out
如果out
不是None
,或者从评估模型中得到一个新数组coords
.如果out
和coords
都是None
,返回的数组仅限于Model.bounding_box
限制。如果Model.bounding_box
是None
,arr
或coords
必须通过。
- out :
- 加薪:
ValueError
如果
coords
不是给定的,并且Model.bounding_box
未设置此型号的。
实例
- sum_of_implicit_terms(*args, **kwargs)[源代码]#
计算一些输入变量上任何隐式模型项的和。这包括在评估线性模型时使用的任何固定术语,这些术语没有向用户公开相应的参数。典型的例子是
astropy.modeling.functional_models.Shift
,对应于函数y=a+bx,其中b=1本质上是由模型类型固定的,因此隐式项的总和(x)=x。线性拟合人员需要这种方法在求解剩余项(即a=y-bx)时校正隐式项的因变量。