使用partial命名参数结合curve_fit进行参数拟合时的异常问题排查与解决咨询
使用partial命名参数结合curve_fit进行参数拟合时的异常问题排查与解决咨询
各位好,我在使用scipy.optimize.curve_fit结合functools.partial固定函数参数的过程中遇到了一个奇怪的问题:用位置参数固定参数时一切正常,但改用命名参数时,部分情况会报错,想请教下这是哪里出了问题,有没有可行的解决办法?
正常工作的位置参数示例
先给大家看一下我已经跑通的位置参数用法:
from scipy.optimize import curve_fit from functools import partial # 测试数据集 xdata = [0]*5 ydata = xdata def func(x, a, b): return x + a + b # 用位置参数固定第一个非x参数(a=2) pfunc = partial(func, 2) popt, _ = curve_fit(pfunc, xdata, ydata) print(popt) # 输出结果:[-2.]
命名参数的异常表现
当我尝试用命名参数来固定参数时,就出现了不一致的情况:
- 固定
b的时候,代码可以正常运行:
from scipy.optimize import curve_fit from functools import partial xdata = [0]*5 ydata = xdata def func(x, a, b): return x + a + b pfunc = partial(func, b=2) popt, _ = curve_fit(pfunc, xdata, ydata) print(popt) # 输出结果:[-2.]
- 但固定
a的时候,直接抛出了异常:
pfunc = partial(func, a=2) popt, _ = curve_fit(pfunc, xdata, ydata) print(popt) # 报错信息:ValueError: Unable to determine number of fit parameters.
我的实际需求
在我的实际项目中,待拟合的函数可能包含n≥3个参数,我需要固定其中最多n-1个参数,所以非常希望能找到一种可靠的、用命名参数来固定参数的方式,而不是依赖位置参数(避免参数顺序变化导致的错误)。
想请教大家:我是不是在使用partial的方式上有错误?有没有办法让命名参数的方式稳定工作?
内容来源于stack exchange
相关产品推荐
相关产品推荐

