为什么我的python lmfit leastsq fitting函数传递了太多参数?
我试着去寻找一个和我犯同样错误的人,但是没有找到快乐!这也是我的第一篇文章,所以如果解释或指导不当,我表示歉意。欢迎指教 我要解决的问题是:通过测量到多个已知参考点的距离来找到某种接收器的位置。这是基本的三边测量,我用最小二乘法来做 我已经成功地使用了scipy.optimize lesatsq函数来实现这一点,所以我非常确定我的拟合函数可以工作。但是,我希望能够使用lmfitpython包提供的一些额外功能,我正在努力将其转换为其他版本。完整的尝试代码如下: lmfit minimize函数设置对my fitting函数(称为residualfunct)的调用,如下所示,其中stationarray是一个包含站点位置和范围的numpy数组,params是fitting函数中要使用的参数字典为什么我的python lmfit leastsq fitting函数传递了太多参数?,python,scipy,least-squares,trilateration,Python,Scipy,Least Squares,Trilateration,我试着去寻找一个和我犯同样错误的人,但是没有找到快乐!这也是我的第一篇文章,所以如果解释或指导不当,我表示歉意。欢迎指教 我要解决的问题是:通过测量到多个已知参考点的距离来找到某种接收器的位置。这是基本的三边测量,我用最小二乘法来做 我已经成功地使用了scipy.optimize lesatsq函数来实现这一点,所以我非常确定我的拟合函数可以工作。但是,我希望能够使用lmfitpython包提供的一些额外功能,我正在努力将其转换为其他版本。完整的尝试代码如下: lmfit minimize函数设
position = minimize(residualfunct, params, args=(stationarray))
我的拟合函数定义为
def residualfunct(params, stationarray):
X = params['solutionX'].value
Y = params['solutionY'].value
Z = params['solutionZ'].value
result = numpy.array([s[3] - linalg.norm(array((X,Y,Z))-array((s[0],s[1],s[2]))) for s in stationarray])
print result
return result
当我运行这段代码时,我得到了TypeError:
residualfunct()正好接受2个参数(给定5个)
由于这个调用是由最小化函数进行的,所以我看不出对此有什么控制。我只能想象,之所以提出这个问题,是因为我将np.array作为参数传递,但这似乎是不可避免的。有人能看出我做错了什么吗
感谢在呼叫
最小化
,更改
args=(stationarray)
到
args
必须是一个序列(通常是元组),其元素是传递给函数的参数。要创建长度为1的元组,需要额外的逗号。当您编写args=(stationarray)
(不带额外的逗号)时,括号无效,这与编写args=stationarray
相同minimize
然后调用函数作为剩余函数(params,stationarray[0],stationarray[1],…),这会导致您报告的错误。在调用minimize
时,更改
args=(stationarray)
到
args
必须是一个序列(通常是元组),其元素是传递给函数的参数。要创建长度为1的元组,需要额外的逗号。当您编写args=(stationarray)
(不带额外的逗号)时,括号无效,这与编写args=stationarray
相同minimize
然后调用函数作为剩余函数(params,stationarray[0],stationarray[1],…),这将导致您报告的错误。您需要显示完整的回溯,因为它将显示调用函数的内容及其传递的内容。您需要显示完整的回溯,因为它将显示调用函数的内容和传递的内容。非常感谢,这非常有效,并且(在解决了我后来发现的所有其他问题之后:)代码现在可以按照我的需要工作了。如果我有足够的声誉,我会投票的。非常感谢,这工作非常完美,(在解决了我后来发现的所有其他问题之后:)代码现在可以按我需要的方式工作了。如果我有足够的声誉,我会投票。