更改Lambd的变量

2024-06-25 23:55:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用scipy编写Python程序(scipy.optimize.curve\u fit曲线拟合). 我必须在一个数据集上拟合多条曲线,然后对它们求和。第一步是找到所有的最大值,这是完成。至少会有一个,但通常会更多。我想概括如下。你知道吗

if (len(Maxima) == 1):
    f = lambda a, b, c : a * exp((b * x) + c)
else if (len(Maxima) == 2):
    f = lambda a, b, c, d, e, f : (a * exp((b * x) + c)) + (d * exp((e * x) + f)

等等。我需要它,这样曲线拟合将认识到有(3*最大值)参数,然后它会找到他们为我。可能有20条左右的曲线,所以这样做是不实际的。你知道吗

任何帮助都将不胜感激。你知道吗

谢谢。你知道吗

编辑: 抱歉,我遗漏了函数依赖于最大值。它实际上是一个集中在每个极大值上的高斯分布。你知道吗

也就是说,一个术语实际上是

f = (a * (Gamma ** 2) / (((E - Maxima[i])**2) + (b**2)))

E是自变量,args必须从它开始。你知道吗

例如,例如

len(Maxima) == 2

args必须是

E, a0, b0, Maxima[0], a1, b1, Maxima[1]

对不起,我错了。你知道吗

编辑2:

我是这样想的:

GaussianDistribution = lambda E, E0, I0, Sigma : (I0 * np.exp(-(((E - E0) / Sigma)**2)))
args = tuple([long] * ((len(Maxima) * 3) + 1))
d1, d2 = sc.curve_fit(GaussianDistribution(*args), Data[:, 0], Data[:, 1])

Tags: lambda编辑lenifargsscipy曲线sigma
2条回答

可以使用arbitrary argument lists创建接受任意数量参数的lambda函数。然后可以使用列表理解一次获取三个参数,对它们执行操作,然后对结果求和。你知道吗

f = lambda *args: sum(args[i] * exp((args[i+1]*x)+args[i+2]) for i in range(0, len(args)-3, 3))

如果我没弄错,你应该可以用一个lambda:

f = lambda a, b, c : a * exp((b * x) + c)

然后呢

result = sum(f(a, b, c) for a, b, c in maxima)

如果maxima

maxima = [(1, 2, 3), (4, 5, 6), (7, 9, 8)]

(我猜是这样)。你知道吗

相关问题 更多 >