python中的fitfunc和errfunc是什么?
我只是想问一下什么是fitfunc,errfunc后面跟着scipy.optimize.leastsq,这是直观的。我不太习惯python,但我想了解这一点。下面是我试图理解的代码python中的fitfunc和errfunc是什么?,python,scipy,Python,Scipy,我只是想问一下什么是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.opt
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))
有人能逐字解释一下这个代码是怎么说的吗?
很抱歉说得这么具体,但我真的很难理解它在说什么。Python支持在运行时使用名为的构造创建匿名函数(即不绑定到名称的函数)。在您的示例中,
fitfunc
和errfunc
是两个这样的lambda函数
我相信calculate\u sp2
和exp\u fitfunc
只是代码中的两个函数,但您没有在示例中提供它们的代码。因此,简而言之,fitfunc
实际使用3个参数(p,p0,mz)
调用calculate_sp2
函数,并返回calculate_sp2
返回的值errfunc
也以同样的方式工作
如的官方文档所述,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)
Python支持在运行时使用名为的构造创建匿名函数(即未绑定到名称的函数)。在您的示例中,
fitfunc
和errfunc
是两个这样的lambda函数
我相信calculate\u sp2
和exp\u fitfunc
只是代码中的两个函数,但您没有在示例中提供它们的代码。因此,简而言之,fitfunc
实际使用3个参数(p,p0,mz)
调用calculate_sp2
函数,并返回calculate_sp2
返回的值errfunc
也以同样的方式工作
如的官方文档所述,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)
这个特定的代码片段正在实现非线性最小二乘回归,以找到最适合一组数据(
exp
,可能是“实验数据”的缩写)的曲线函数的参数(这里是fitfunc
)leastsq()
是一种更通用的程序,用于执行非线性最小二乘优化,而不仅仅是曲线拟合。它需要一个函数(此处名为errfunc
),该函数给定一个参数向量(p
),并返回一个数组。它将试图找到使返回数组的平方最小化的参数向量。为了使用leastsq
实现“曲线与数据拟合”,您必须提供一个errfunc
,该函数在给定试验参数向量下计算曲线(fitfunc
),然后从数据中减去曲线(即计算“误差”或有时称为“残差”)
只是想澄清一下,这些名字都不重要。我只是用它们来指代您提供的代码片段的特定部分。您将找到其他使用
leastsq()
进行曲线拟合的代码,这些代码的命名和组织方式稍有不同,但现在您了解了一般方案,应该可以继续使用。此特定代码片段正在实现非线性最小二乘回归以查找曲线函数的参数(这里是最适合一组数据(exp
,可能是“实验数据”的缩写)的fitfunc
。leastsq()
是一种更通用的非线性最小二乘优化程序,而不仅仅是曲线拟合。它需要一个函数(这里称为errfunc
)给定一个参数向量(p
)并返回一个数组。它将尝试找到使返回数组的平方最小的参数向量。为了使用leastsq
实现“将曲线拟合到数据”,必须提供一个对曲线求值的errfunc
)在给定的试验参数向量上,然后从数据中减去它(即计算“误差”或有时称为“残差”)
需要明确的是,这些名称都不重要。我只是用它们来指代您提供的代码片段的特定部分。您将找到使用
leastsq()的其他代码
对于曲线拟合,命名和组织代码的方式稍有不同,但现在您知道了总体方案,您应该能够遵循。感谢您的评论。这很有意义!@seoyonhong最好的感谢方式是接受答案!感谢您的评论。这很有意义!@seoyonhong最好的感谢方式是通过gh接受答案!感谢您的评论。我很难理解它,但现在它有意义了!附加问题…在代码后面我看到optimize_parameters2(p,mz)[0]。我对[0]部分感到困惑。这表明了什么?这是关于向量p的吗?请查看文档中的leastsq()
以查看它返回的内容。它返回一个元组,其中包含最佳p
向量,作为第一个元素,后跟有关解决方案的附加信息。[0]
正在挑选p
向量并忽略剩余的辅助信息。好的..p0和mz呢?如果p是向量参数,我们如何描述p0和mz?它们只是计算sp2
所需的附加参数。它们除了需要传递之外,没有其他特殊作用