模型

class astropy.modeling.Model(*args, meta=None, name=None, **kwargs)[源代码]

基类:object

所有模型的基类。

这是一个抽象类,不应直接实例化。

默认情况下,以下初始化参数适用于大多数模型子类(异常包括特殊实用程序模型,如 Mapping ). 参数化模型将其所有参数作为参数,后跟以下任意可选关键字参数:

参数
name可选的STR

与此模型实例关联的人类友好名称(特别适用于标识复合模型的各个组件)。

meta可选的

附加到此模型的用户定义元数据的可选dict。如何使用和解释这取决于用户或单个用例。

n_models可选的

如果给定一个大于1的整数,则 模型集 是实例化的,而不是单个模型。这会影响参数参数的解释方式。在这种情况下,每个参数都必须以列表或数组的形式给出——该数组的元素沿着第一个轴(或 model_set_axis 如果指定),则第n个元素是集合中第n个模型的该参数的值。

有关更多详细信息,请参阅文档中有关模型集的部分。

model_set_axis可选的

只在创建模型时应用。 n_models > 1 ). 它改变了参数值的解释方式。通常,每个输入参数数组的第一个轴(正确地说是第0个轴)作为与模型集相对应的轴。然而,输入阵列的任何轴都可以被视为这个“模型集轴”。这也接受负整数——例如使用 model_set_axis=-1 如果最后一个(变化最快)轴应与模型集相关联。也, model_set_axis=False 可用于指示应使用给定的输入来评估模型集中的所有模型。

fixed可选的

词典 {{parameter_name: bool}} 为一个或多个参数设置固定约束。 True 表示参数在拟合过程中保持不变,并且在创建模型实例后阻止更新。

或者 fixed 属性可用于锁定或解锁单个参数。

tied可选的

词典 {{parameter_name: callable}} 链接到其他参数的参数。字典值是提供链接关系的可调用项。

或者 tied 属性可用于设置 tied 对单个参数的约束。

bounds可选的

字典 {{parameter_name: value}} 参数的上下界。键是参数名。值是一个长度为2的列表或元组,为参数提供所需的范围。

或者 minmax 或者~astropy.modeling.Parameter.bounds`参数的属性可用于设置单个参数的边界。

eqcons可选列表

这个函数的长度 eqcons[j](x0, *args) == 0.0 在一个成功优化的问题中。

ineqcons可选列表

这个函数的长度 ieqcons[j](x0, *args) >= 0.0 是一个成功优化的问题。

实例

>>> 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

属性摘要

bbox_with_units 

bounding_box 

A tuple 长度的 n_inputs 定义边界框限制或升高 NotImplementedError 表示没有边界框。

bounds 

A dict 将参数名映射到它们的上下界 (min, max) 元组或 [min, max] 列表。

cov_matrix 

装配工应设置协方差矩阵(如果可用)。

eqcons 

参数相等约束列表。

fittable 

fixed 

A dict 将参数名称映射到其固定约束。

has_user_bounding_box 

一个标志,指示用户是否已通过赋值给此模型指定自定义边界框 model.bounding_box .

has_user_inverse 

一种标志,指示用户是否通过赋值给该模型指定了自定义逆模型 model.inverse .

ineqcons 

参数不等式约束列表。

input_units 

此属性用于指示evaluate方法所需的单元或单元集,并返回将输入映射到单元(或 None 如果接受任何单位)。

input_units_allow_dimensionless 

允许无量纲输入(和相应的输出)。

input_units_equivalencies 

input_units_strict 

对要评估的输入执行严格的单位。

inputs 

inverse 

返回新的 Model 执行反变换的实例,如果为此模型定义了解析逆。

linear 

meta 

一个类似dict的对象,用于存储可选信息。

model_constraints 

主要出于信息目的,这些是约束模型评估的约束类型。

model_set_axis 

模型集轴的索引--即参数数组的轴,该轴属于参数值所属的模型--在模型初始化时指定。

n_inputs 

输入的数目。

n_outputs 

输出的数目。

n_submodels 

返回单个模型中组件的数量,显然是1。

name 

用户为此模型实例提供的名称。

outputs 

param_names 

描述此类型模型的参数的名称。

param_sets 

以pset形式返回参数。

parameter_constraints 

主要是为了提供信息,这些是可以对模型参数设置的约束类型。

parameters 

所有参数集中所有参数值的展平数组。

return_units 

此属性用于指示evaluate的输出应包含哪些单元或单元集,并返回将输出映射到单元(或)的字典 None 如果接受任何单位)。

separable 

指示模型是否可分离的标志。

standard_broadcasting 

stds 

参数的标准偏差,如果协方差矩阵可用。

sync_constraints 

这是一个布尔属性,指示访问约束是否自动检查构成模型的当前值。

tied 

A dict 将参数名称映射到它们的绑定约束。

uses_quantity 

如果此模型是用 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)

strip_units_from_tree \()

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) 。有关更多用法,请参见 astropy:bounding-boxes

这些限制是根据 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_boxNone

>>> 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

一个类似dict的对象,用于存储可选信息。

model_constraints = ('eqcons', 'ineqcons')

主要出于信息目的,这些是约束模型评估的约束类型。

model_set_axis

模型集轴的索引--即参数数组的轴,该轴属于参数值所属的模型--在模型初始化时指定。

请参阅上的文档 astropy:modeling-model-sets 了解更多详细信息。

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 将参数名称映射到它们的绑定约束。

uses_quantity

如果此模型是用 Quantity 对象或如果没有参数。

这可用于确定是否应使用 Quantity 或者普通的浮动。

方法文件

__call__(*args, **kwargs)[源代码]

使用给定的输入和实例化模型时指定的参数值评估此模型。

coerce_units(input_units=None, return_units=None, input_units_equivalencies=None, input_units_allow_dimensionless=False)[源代码]

将单位附加到此(无单位)模型。

参数
input_unitsdict或tuple,可选

要附加的输入单位。如果是dict,则每个键都是模型输入的名称,值是要附加的单位。如果是元组,则元素是要按照与 Model.inputs .

return_unitsdict或tuple,可选

要附加的输出单元。如果是dict,则每个键都是模型输出的名称,值是要附加的单位。如果是元组,则元素是要按照与 Model.outputs .

input_units_equivalencies可选的

应用于输入值的默认等效值。如果设置,这应该是一个字典,其中每个键都是一个字符串,对应于一个模型输入。

input_units_allow_dimensionlessbool或dict,可选

允许无量纲输入。如果为真,则要计算的输入值将获得input_units中指定的单位。如果这是一个字典,那么它应该将输入名称映射到bool,以允许该输入使用无量纲数字。

返回
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>
copy()[源代码]

返回此模型的副本。

使用深度复制,以便复制所有模型属性(包括参数值)。

deepcopy()[源代码]

返回此模型的深层副本。

abstract evaluate(*args, **kwargs)[源代码]

在一些输入变量上评估模型。

get_bounding_box(with_bbox=True)[源代码]

返回 bounding_box 模型(如果存在)或 None 否则的话。

参数
with_bbox

它的价值在于 with_bounding_box 调用模型时的关键字参数。缺省值为 True 用于查找模型时的用法 bounding_box 没有出错的风险。

has_inverse()[源代码]

如果模型定义了分析或用户反转,则返回True。

input_shape(inputs)[源代码]

获取边界框求值的输入形状

output_units(**kwargs)[源代码]

在给定适合输入和输出的字典的情况下,返回此模型的输出单位字典

输入和输出数量对象应作为关键字参数给定。

笔记

为了能够用参数中的单位拟合模型,需要使用这种方法,因为在拟合过程中,我们需要暂时从模型中去除单元(这可能是通过scipy函数完成的)。

这种方法将强制进行额外的模型评估,这可能会导致计算代价高昂。要避免这种情况,可以向模型添加Return_Units属性,请参见 astropy:models_return_units

prepare_inputs(*inputs, model_set_axis=None, equivalencies=None, **kwargs)[源代码]

此方法用于 __call__ 确保模型的所有输入都可以广播到兼容的形状中(如果其中一个或两个都作为数组输入),特别是在有多个参数集的情况下。这还可以确保(如果适用)输入的单位与evaluate方法兼容。

prepare_outputs(broadcasted_shapes, *outputs, **kwargs)[源代码]
classmethod rename(name=None, inputs=None, outputs=None)[源代码]

使用新名称返回此模型的副本。

render(out=None, coords=None)[源代码]

在固定位置评估模型,考虑 bounding_box .

与直接评估模型相关的关键区别在于,如果 Model.bounding_box 属性已设置。

参数
outnumpy.ndarray 可选努比·恩达雷,可选

将向其添加计算模型的数组。如果这不是 None ),将创建一个新数组。

coords类似阵列,可选

用于将模型的输入坐标转换为 out 数组。它应该具有 self(coords) 产生的形状与 out . 如果 out 未指定, coords 将用于确定返回数组的形状。如果没有提供(或没有),则将在由 Model.bounding_box .

返回
outnumpy.ndarraynumpy.ndarray

模型添加到 out 如果 out 不是 None ,或者从评估模型中得到一个新数组 coords .如果 outcoords 都是 None ,返回的数组仅限于 Model.bounding_box 限制。如果 Model.bounding_boxNonearrcoords 必须通过。

加薪
ValueError

如果 coords 没有给出 Model.bounding_box 未设置此模型的。

实例

astropy:bounding-boxes

set_slice_args(*args)[源代码]
strip_units_from_tree()[源代码]
sum_of_implicit_terms(*args, **kwargs)[源代码]

计算一些输入变量上任何隐式模型项的和。这包括在评估线性模型时使用的任何固定术语,这些术语没有向用户公开相应的参数。典型的例子是 astropy.modeling.functional_models.Shift ,对应于函数y=a+bx,其中b=1本质上是由模型类型固定的,因此隐式项的总和(x)=x。线性拟合人员需要这种方法在求解剩余项(即a=y-bx)时校正隐式项的因变量。

with_units_from_data(**kwargs)[源代码]

返回模型的实例,该实例的参数值与指定的数据单位兼容。

输入和输出数量对象应作为关键字参数给定。

笔记

为了能够用参数中的单位拟合模型,需要使用这种方法,因为在拟合过程中,我们需要暂时从模型中去除单元(这可能是通过scipy函数完成的)。

参数将获得的单位不一定是输入数据的单位,而是从中派生出来的。模型子类需要定义一个 _parameter_units_for_data_units 方法,该方法接受输入和输出单元(作为两个字典),并返回一个字典,给出每个参数的目标单位。

without_units_for_data(**kwargs)[源代码]

返回一个模型实例,其中的参数值已转换为数据的正确单位,然后单位已被剥离。

输入和输出数量对象应作为关键字参数给定。

笔记

为了能够用参数中的单位拟合模型,需要使用这种方法,因为在拟合过程中,我们需要暂时从模型中去除单元(这可能是通过scipy函数完成的)。

参数应转换为的单位不一定是输入数据的单位,而是从中派生出来的。模型子类需要定义一个 _parameter_units_for_data_units 方法,该方法接受输入和输出单元(作为两个字典),并返回一个字典,给出每个参数的目标单位。