【发布时间】:2018-07-17 23:11:20
【问题描述】:
本主题描述如何使用 lmfit 拟合多个数据集: Python and lmfit: How to fit multiple datasets with shared parameters?
但是它使用用户编写的拟合/目标函数。
我想知道是否可以使用 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'
所以我只是想做一些不可能的事情还是我做错了什么?
【问题讨论】:
标签: python-2.7 lmfit