基于lmfit的最小化拟合:多参数设置触发TypeError问题排查
问题排查与修复方案
嘿,我一眼就发现你遇到的TypeError问题根源了——lmfit.minimize要求args参数传入一个可迭代对象(比如元组),但你传的是单个numpy浮点数。
错误具体位置
看你第二段代码里的这一行:
result = minimize(objective, params=params, args=( data[d]))
这里的(data[d])只是单个数值,Python不会把它识别为元组。而minimize内部会用*操作符对args进行解包,单个浮点数没法被解包,所以直接抛出了错误。
简单修复方式
只需要在data[d]后面加个逗号,把它变成单元素元组就行:
result = minimize(objective, params=params, args=(data[d],))
额外优化建议
另外,你的目标函数返回的是单个数值data - m,虽然lmfit勉强能处理,但它的设计预期是返回残差数组。更规范的写法是把结果包装成长度为1的数组,比如:
def objective(params, data): x = params['x'] amp = params['amp'] cen = params['cen'] wid = params['wid'] m = gaussian(x, amp, cen, wid) return np.array([data - m]) # 转为数组形式
这样能更贴合库的使用规范,避免后续可能出现的奇怪问题。
内容的提问来源于stack exchange,提问作者Muhammad
相关产品推荐
相关产品推荐

