gpt4 book ai didi

python-2.7 - 对可变数量的参数使用 scipy curve_fit

转载 作者:行者123 更新时间:2023-12-04 01:43:46 25 4
gpt4 key购买 nike

我有一个拟合函数,其形式为:

def fit_func(x_data, a, b, c, N)

其中a、b、c是长度为N的列表,其中每一项都是scipy.optimize.curve_fit()中待优化的可变参数,N是用于循环索引控制的固定数。

正在关注 this question我想我可以修复 N,但我目前正在按如下方式调用 curve_fit:

params_0 = [a_init, b_init, c_init]
popt, pcov = curve_fit(lambda x, a, b, c: fit_func(x, a, b, c, N), x_data, y_data, p0=params_0)

我得到一个错误:lambda() 正好接受 Q 个参数(给定 P)

Q 和 P 因我的设置方式而异。

那么:对于初学者来说,这甚至可能吗?我可以将列表作为参数传递给 curve_fit 并具有我希望的行为,其中它将列表元素视为单独的参数吗?假设答案是肯定的,我的函数调用哪里做错了?

最佳答案

这里的解决方案是编写一个包装函数,它接受您的参数列表并将其转换为适合函数理解的变量。这真的是必要的,因为我正在使用其他人的代码,在更直接的应用程序中,这可以在没有包装层的情况下工作。基本上

def wrapper_fit_func(x, N, *args):
a, b, c = list(args[0][:N]), list(args[0][N:2*N]), list(args[0][2*N:3*N])
return fit_func(x, a, b, c, N)

要修复 N,您必须像这样在 curve_fit 中调用它:

popt, pcov = curve_fit(lambda x, *params_0: wrapper_fit_func(x, N, params_0), x, y, p0=params_0)

在哪里

params_0 = [a_1, ..., a_N, b_1, ..., b_N, c_1, ..., c_N]

关于python-2.7 - 对可变数量的参数使用 scipy curve_fit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34136737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com