我正在尝试将lmfit
参数结果提取为数据帧。我通过x
和参数data
传递1列fit_func
,1列[C0]和pars
输出中的minimize
函数的输出作为OrderedDict。
lmfit
输出:
out = minimize(fit_func, pars, method = 'leastsq', args=(x, data))
res = out.params.valuesdict()
res
我想要用OrderedDict([('a1', 12.850309404600393),
('c1', 1346.833513206811),
('s1', 44.22337472274829),
('f1', 1.1275639898142586),
('a2', 77.15732669480884),
('c2', 1580.5712512351947),
('s2', 16.239969775527275),
('f2', 0.8684363668111492)])
这样实现的DataFrames中的输出:pd.DataFrame(res,index=[0])
我有3个要快速适应的数据列:
但是我得到了一系列有序字典作为数据框中的行:
x = d.iloc[:,0]
fit_odict = pd.DataFrame(d.iloc[:,1:4].\
apply(lambda y: minimize(fit_func, pars, method = 'leastsq', args=(x, y))\
.params.valuesdict()),index=[1])
如何使用三个参数结果作为行来获取所需的输出?有没有更好的方法来应用该功能?
UPDATE:
在我的解决方案中附加了@M Newville。对于想要从多个数据列中快速提取lmfit
参数结果的用户可能会有所帮助。
d1.iloc[:,1:]
输出:
def fff(cols):
out = minimize(fit_func, pars, method = 'leastsq', args=(x, cols))
return {key: par.value for key, par in out.params.items()}
results = d1.iloc[:,1:].apply(fff,result_type='expand').transpose()
我正在尝试将lmfit参数结果提取为数据帧。我通过fit_func和参数pars传递1列x,1列数据,并在lmfit输出中将最小化函数的输出传递为...
单身适合,这可能是您要寻找的:
这是您可以做的快速解决方案。代码效率不高,但是您可以对其进行优化。请注意,索引从1开始,但是欢迎您使用pandas库重新索引。
results = {key: [] for key in pars}
for data in datasets:
out = minimize(fit_func, pars, method='leastsq', args=(x, data))
for par_name, val_list in results.items():
val_list.append(out.params[par_name].value)
results = pd.DataFrame(results)