python - 使用具有固定参数的 scipy.otimize.least_squares 时更改函数后的 TypeError (Python)
问题描述
我尝试使用 scipy.optimize 包中的 minimum_squares 来拟合数据。我有一个可行的半解决方案并更改了 fit 函数并突然得到一个
TypeError: <lambda>() takes exactly 4 arguments (5 given)
这是代码的相关部分:
from scipy.optimize import least_squares
def hill_fit(x,kd,start,end,n):
return start+(end-start)*x**n/(kd**n+x**n)
fitfun_hill_err= lambda p,x,fix,err: hill_fit(x,p[0],p[1],p[2],fix[0])/err
p_init=[0.1,.1,.2]
fix=np.array([.5] ).ravel()
least_squares(fitfun_hill_err, p_init, args=(x_data, y_data,fix,y_error),bounds=(0,500))
我想拟合 p[..] 中的参数,因此是 lambda 函数。
x_data 是函数的输入数据,y_error 是结果数据 (y_data) 的不确定性,而 fix 是传递给函数的附加参数。
我之前使用过以下功能(相应地调整参数):
def func_fit(conc, Kd2, B, C, Rt, Lst, Kd1):
Lt = conc
e_tmp = e(Lt, Rt, Kd1, Lst, Kd2)
d_tmp = d(Kd1, Kd2, Lst, Lt, Rt)
f_tmp = f(Kd1, Kd2, Rt)
theta_tmp = theta(d_tmp, e_tmp, f_tmp)
FA_tmp = FA(B, C, d_tmp, e_tmp, f_tmp, theta_tmp, Kd1)
return FA_tmp
使用 e、d、f、theta 和 FA 调用子函数。
我之前经历过“我需要以包装的方式给最小平方参数”,这就是我引入 lambda 函数的原因,但我不明白为什么它不再起作用了。
请帮助我理解 minimum_square 函数的行为以及我在这里误解的内容!
谢谢!
解决方案
遵循错误消息:TypeError: () 正好需要 4 个参数(给定 5 个)。
fitfun_hill_err= lambda p,x,fix,err
lambda 接受参数和 3 个其他参数 ( x, fix, err
)。一共4个论点。
least_squares
使用参数和其他 4 个参数 ( ) 调用此函数args=(x_data, y_data, fix, y_error)
,总共 5 个参数。
x
期望和传递x_data
和之间存在不匹配y_data
。
推荐阅读
- python - 将字符串转换为日期时间时,Cursor 的 iterate() 方法有时会失败
- excel - 发送多封电子邮件:运行时错误“440”:对象不支持此方法
- firefox-addon - Firefox 扩展调试器显示“此页面没有来源”
- c# - 如何通过分配具有相似字段的其他对象来创建对象
- python - 返回类实例时的 Numpydoc 样式约定
- android-fragments - 如何在 Java 项目中使用 NavigationExtensions.kt?
- c - 是否有受 setlocale() 影响的函数的完整列表?
- swift - 如何旋转具有固定锚点的 SCNNode?
- scala - 在 spark scala 中通过 cuid 聚合和求和向量稀疏
- python - 将 2 个列表与 ref 与元素的位置进行比较?