2024-09-27 09:34:33 发布
网友
我在scipy'leatsq'优化程序中遇到了一个问题,如果我执行以下程序
raise errors[info][1], errors[info][0] TypeError: Improper input parameters.
有时index out of range for an array。。。在
index out of range for an array
我不知道我的函数有什么问题优化.leatsq()打电话来,请帮帮我
仅仅看一下least squares docs,可能是函数{}的定义不正确。假设您总是收到长度至少为2的数组,但是优化函数对于将要接收的数组的长度非常模糊。你可以试着写些东西来屏蔽apar是什么,看看你到底得到了什么。在
apar
如果您使用的是ipython或pythonshell,那么应该得到堆栈跟踪,以准确地显示错误发生在哪一行,所以从这里开始。如果你不能从那里找到答案,发布堆栈跟踪可能会对我们有所帮助。在
ipython
因为您希望最小化一个简单的标量函数(func()返回一个值,而不是一个值列表),scipy.optimize.leastsq()应该被一个对fmin函数之一的调用(带有适当的参数)来代替:
func()
scipy.optimize.leastsq()
fmin
x = optimize.fmin(func, Init)
正确工作!在
事实上,leastsq()最小化了一系列值的平方和。它似乎不适用于(包含)单个值的列表,就像在您的示例中一样(即使理论上可以)。在
leastsq()
leastsq与向量一起工作,因此剩余函数func需要返回长度至少为2的向量。因此,如果您将return eqn替换为return [eqn, 0.],那么您的示例将起作用。运行它可以:
leastsq
func
return eqn
return [eqn, 0.]
optimized parameters: (array([10., 10.]), 2)
这是关于绝对差最小的众多正确答案之一。在
如果你想最小化一个标量函数,fmin是最好的选择,optimize.fmin(func, Init)。在
optimize.fmin(func, Init)
这里的问题是,这两个函数虽然看起来相同,但对于标量来说,它们的目标是不同的。leastsq通常从一组理想曲线中找出最小平方误差,这只是实现“最佳拟合”的一种方法。另一方面,fmin找到标量函数的最小值。在
很明显你的例子是个玩具,这两个都没有意义,所以你走哪条路取决于你的最终目标是什么。在
仅仅看一下least squares docs,可能是函数{}的定义不正确。假设您总是收到长度至少为2的数组,但是优化函数对于将要接收的数组的长度非常模糊。你可以试着写些东西来屏蔽
apar
是什么,看看你到底得到了什么。在如果您使用的是
ipython
或pythonshell,那么应该得到堆栈跟踪,以准确地显示错误发生在哪一行,所以从这里开始。如果你不能从那里找到答案,发布堆栈跟踪可能会对我们有所帮助。在因为您希望最小化一个简单的标量函数(
func()
返回一个值,而不是一个值列表),scipy.optimize.leastsq()
应该被一个对fmin
函数之一的调用(带有适当的参数)来代替:正确工作!在
事实上,
leastsq()
最小化了一系列值的平方和。它似乎不适用于(包含)单个值的列表,就像在您的示例中一样(即使理论上可以)。在leastsq
与向量一起工作,因此剩余函数func
需要返回长度至少为2的向量。因此,如果您将return eqn
替换为return [eqn, 0.]
,那么您的示例将起作用。运行它可以:这是关于绝对差最小的众多正确答案之一。在
如果你想最小化一个标量函数,
fmin
是最好的选择,optimize.fmin(func, Init)
。在这里的问题是,这两个函数虽然看起来相同,但对于标量来说,它们的目标是不同的。
leastsq
通常从一组理想曲线中找出最小平方误差,这只是实现“最佳拟合”的一种方法。另一方面,fmin
找到标量函数的最小值。在很明显你的例子是个玩具,这两个都没有意义,所以你走哪条路取决于你的最终目标是什么。在
相关问题 更多 >
编程相关推荐