You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:15:03