本主题介绍如何使用 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: setting an array element with a sequence
如果我传递一个数组,我会得到一个 AttributeError: 'numpy.ndarray' has no atribute 'exp'
那么我只是想做一些不可能的事情还是我做错了什么?