我只是想问你所有关于什么是fitfunc,errfunc后面跟scipy.optimize.leastsq直观。我并不习惯python,但我想理解这一点。这是我想要了解的代码。
def optimize_parameters2(p0,mz):
fitfunc = lambda p,p0,mz: calculate_sp2(p, p0, mz)
errfunc = lambda p,p0,mz: exp-fitfunc(p,p0,mz)
return scipy.optimize.leastsq(errfunc, p0, args=(p0,mz))
有人可以一字一句解释这段代码的叙述吗? 很抱歉这么具体,但我确实无法理解它的内容。
答案 0 :(得分:0)
Python支持在运行时使用名为lambda的构造创建匿名函数(即未绑定到名称的函数)。在您的示例中,fitfunc
和errfunc
是两个这样的lambda函数。
我相信calculate_sp2
和exp_fitfunc
只是代码中的两个函数,但您未在示例中提供其代码。因此,简而言之,fitfunc
实际上使用3个参数calculate_sp2
调用(p, p0, mz)
函数,并返回calculate_sp2
返回的值。 errfunc
也以同样的方式运作。
正如scipy.optimize.leastsq的官方文档中所提到的,leastsq()
最小化了一组方程的平方和。您可以从官方文档中了解leastsq()
的参数。
我给出一个简单的例子来说明lambda函数的工作原理。
def add(x,y):
return x + y
def subtract(x,y):
return x-y if x > y else y-x
def main(x,y):
addition = lambda x,y: add(x,y)
subtraction = lambda x,y: subtract(x,y)
return addition(x,y) * subtraction(x,y)
print(main(7,4)) # prints 33 which is equal to (7+4)*(7-4)
答案 1 :(得分:0)
这个特定的代码片段正在实现非线性最小二乘回归,以找到最适合一组数据的曲线函数的参数(这里是fitfunc
)exp
,可能是“实验数据”的缩写)。 leastsq()
是进行非线性最小二乘优化的一种更通用的例程,而不仅仅是曲线拟合。它需要一个函数(这里名为errfunc
),它给出一个参数向量(p
)并返回一个数组。它将尝试找到最小化返回数组的平方的参数向量。为了使用leastsq
实现“将曲线拟合到数据”,您必须提供errfunc
来评估给定试验参数向量的曲线(fitfunc
),然后从中减去数据(即计算“错误”或有时称为“残差”)。
要明确的是,这些名称都不重要。我只是用它们来引用你提供的代码片段的特定部分。您将找到使用leastsq()
进行曲线拟合的其他代码,这些代码以不同的方式命名和组织代码,但现在您知道了一般方案,您应该可以继续使用。