Python scipy optimize fmin 与 matlab fminsearch 错误
我正在把这个 Matlab 的函数句柄转换成 Python,但在 Python 中遇到了一个错误(ValueError: setting an array element with a sequence.)。我对 Python 还很陌生,如果有什么明显的错误请见谅。
在 Matlab 中:
P = [1 1; 6 1; 6 5]
fh = @(x) sqrt(sum((ones(3,1)*x - P).^2, 2))
[x,fval] = fminsearch(@(x) max(fh(x)),[0 0])
在 Python 中:
P = np.matrix([[1, 1],[ 6, 1],[ 6, 5]])
fh = lambda x:np.sqrt(sum(np.power((np.ones((3,1))*x - P),2),axis = 0))
xopt = scipy.optimize.fmin(func=fh,x0 = np.matrix([0, 0]))
这段代码在 Matlab 中能正常运行,但在 Python 中却不行,谢谢。
1 个回答
0
在你的Matlab代码中,fminsearch
是在最小化fh(x)
的最大值。因此,在Python代码中,传给fmin
的func
也应该是fh
的最大值:
import numpy as np
from scipy import optimize
P = np.array([[1, 1],[ 6, 1],[ 6, 5]])
def fh(x):
return np.max(np.sqrt(np.sum((x - P)**2, axis=1)))
xopt = optimize.fmin(func=fh, x0=np.array([0, 0]))
print(xopt)
会得到
Optimization terminated successfully.
Current function value: 3.201562
Iterations: 117
Function evaluations: 222
[ 3.50007127 2.99991092]