Использование Specutils 'Gaussian1d с оценками параметров - PullRequest
1 голос
/ 10 июля 2020

Я запускаю "простой пример" из specutils для подгонки строк.

Демо-код находится здесь:

https://specutils.readthedocs.io/en/stable/fitting.html

Это работает и делает то, что говорит.

Однако я хочу использовать оценку параметров, чтобы получить приближение к начальным параметрам в гауссиане, потому что мне интересно посмотреть на ряд длинных спектров с много строк и хочу попытаться автоматически выполнить начальную подгонку.

Поэтому я изменяю импорт specutils.fitting на

from specutils.fitting import fit_lines, estimate_line_parameters

и добавляю

e1 = estimate_line_parameters(spectrum, models.Gaussian1D())
a = round(e1.amplitude.value,2)
b = round(e1.fwhm.value,2)
c = round(e1.stddev.value,2)

Это дает значимые значения, и я заменяю вызов гауссиану на:

g_init = models.Gaussian1D(amplitude=a*u.Jy, mean=b*u.um, stddev=c*u.um)

, затем

g_fit = fit_lines(spectrum, g_init)
y_fit = g_fit(x*u.um)

Начальные значения, которые я получаю от оценщика:

initial amplitude= 3.35 initial fwhm = 2.41 initial stddev= 1.02

Но, глядя на выходные параметры с помощью g_fit.amplitude.value et c, я получаю:

final amplitude= -0.24 Jy final fwhm = 0.0 um final stddev= 0.0 um

для выходных значений !! Если оценочные параметры верны, то выходные значения должны быть очень близкими.

В чем проблема при использовании подобных оценщиков - и как ее решить?

ПРИМЕЧАНИЕ: Если я заменю параметры в g_init со значениями, указанными в примере, я затем получаю:

initial amplitude= 3.35  initial fwhm =  2.41  initial stddev= 1.02
final amplitude= 3.0471 Jy  final fwhm =  1.9157 um  final stddev= 0.8135 um

, что согласуется с тем, что вы ожидаете от кривой, построенной в примере.

FWIW Я использую Jupyter Notebook , matplotlib 3.2.2, specutils 1.0, numpy 1.19, python 3.6 во всем Ubuntu 19.10

...