Python scipy optimize fmin 与 matlab fminsearch 错误

1 投票
1 回答
1550 浏览
提问于 2025-04-18 03:13

我正在把这个 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代码中,传给fminfunc也应该是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]

撰写回答