如何在Python中正确使用fminsearch?

时间:2016-08-04 13:24:46

标签: python matlab python-2.7 python-3.x

我正在尝试在python中翻译我的matlab代码的一部分。其实我正在寻找如何翻译fminsearch,我在这个网站上找到了这个例子:

import scipy.optimize

banana = lambda x: 100*(x[1]-x[0]**2)**2+(1-x[0])**2
xopt = scipy.optimize.fmin(func=banana, x0=[-1.2,1])

我的第一个问题是如何返回fmin的值?

在我键入的代码中:

banana = lambda X: diff_norm(X, abst0, ord0);
Xu = scipy.optimize.fmin(func=banana, X)

Python回答我:

Xu = scipy.optimize.fmin(func=banana, X)
SyntaxError: non-keyword arg after keyword arg

我不明白为什么Python告诉我,因为我想做的是最小化函数diff_norm更改X的值,我精确X是一个数组长度10。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

Python告诉你,因为在Python中,关键字参数总是遵循非关键字(即位置)参数(关键字args具有分配给它们的名称,如func调用中的fmin。您的函数调用应如下所示:

Xu = scipy.optimize.fmin(func=banana, x0=X)

以符合 Python's calling conventions 。或者,根据function definition of fmin,您只能为这两个第一个参数提供位置参数:

Xu = scipy.optimize.fmin(banana, X)

这将返回最小化函数的值,因此,只需调用提供这些参数的函数:

minval = banana(Xu)

或者你可以用fmin调用full_output = True并获得一个元组元组,该元组的第二个元素是最小值:

_, minval, *_ = scipy.optimize.fmin(banana, X, full_output=True)

现在minval包含您的完整输出。