Я запускаю "простой пример" из 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