scipy.optimize.leastsq切换least_squares报参数数量错误如何解决
错误原因
你遇到的报错是least_squares的args参数传值格式错误导致的:
- Python语法里,
(df_calibration)不会被识别为单元素元组,仅会被判定为df_calibration本身 least_squares会对args参数做迭代拆包,你的df_calibration是有10列的DataFrame,迭代时会返回10个列名,加上第一个默认传入的x0参数,刚好凑够11个参数传入残差函数,和报错描述完全吻合- 旧版
leastsq对非元组类型的args参数做了兼容处理,会自动将其包装为单元素元组,所以没有触发报错
修复方案
仅需要给args参数的值加一个逗号,将其明确标记为单元素元组即可:
x, flag = least_squares(residuals_cmrset_as_2009JoH, np.transpose(x0), args=(df_calibration,))
附加说明:参数边界配置
你切换least_squares的核心需求是加参数边界,可以通过bounds参数实现,示例如下:
# 示例:按x0的顺序对应填写每个参数的上下界,无限制的边界可以用np.inf/-np.inf lower_bounds = [0, 0, 0, 0, 0, 0, 0, -np.inf, 1, 0, 0.9] upper_bounds = [2, 3, 2, 50, 5, 1, 3, np.inf, 1, 0, 0.9] x, flag = least_squares(residuals_cmrset_as_2009JoH, np.transpose(x0), args=(df_calibration,), bounds=(lower_bounds, upper_bounds))
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

