В этом разделе описывается, как разместить несколько наборов данных с помощью lmfit: Python и lmfit: как уместить несколько наборов данных с общими параметрами?
Однако он использует подгоночную / целевую функцию, написанную пользователем.
Мне было интересно, можно ли уместить несколько наборов данных с помощью lmfit без написания целевой функции и использования метода model.fit () класса модели.
В качестве примера: допустим, у нас есть несколько наборов данных с координатами (x, y), которые мы хотим подогнать, используя одну и ту же функцию модели, чтобы найти набор параметров, который в среднем лучше всего подходит для всех данных.
import numpy as np
from lmfit import Model, Parameters
from lmfit.models import GaussianModel
def gauss(x, amp, cen, sigma):
return amp*np.exp(-(x-cen)**2/(2.*sigma**2))
x1= np.arange(0.,100.,0.1)
x2= np.arange(0.,100.,0.09)
y1= gauss(x1, 1.,50.,5.)+ np.random.normal(size=len(x1), scale=0.1)
y2= gauss(x2, 0.8,48.4.,4.5)+ np.random.normal(size=len(x2), scale=0.1)
mod= GaussianModel()
params= mod.make_params()
mod.fit([y1,y2], params, x= [x1, x2])
Я думаю, если это возможно, данные должны быть переданы в mod.fit правильного типа. В документации только сказано, что mod.fit принимает ввод данных в виде массива.
Я пробовал давать ему списки и массивы. Если я передаю разные наборы данных в виде списка, я получаю ValueError: установка элемента массива с последовательностью
Если я передаю массив, я получаю AttributeError: 'numpy.ndarray' не имеет атрибута 'exp'
Так я просто пытаюсь сделать что-то, что невозможно, или я делаю что-то не так?