You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行scipy的BFGS优化算法时出现ValueError错误是什么原因?

Scipy optimize.minimize BFGS方法报错原因分析
  • 核心触发原因:scipy.optimize.minimize要求传入的目标函数必须返回单个标量值,你当前代码运行时目标函数返回的是长度为5的numpy数组,不符合接口要求。

原因拆解

你传入的初始值x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])是长度为5的一维数组,minimize在迭代过程中每次传给目标函数f的输入x都是和x0形状一致的(5,)数组。你当前定义的f(x) = (x-2)**2 + 2是逐元素计算逻辑,输入为长度5的数组时,输出也是长度5的数组,不是单值标量,因此触发了报错。


对应解决方法

场景1:你原本要优化单变量函数

仅需修改初始值为单值或长度为1的数组即可:

x0 = np.array([1.3])
res = minimize(f, x0, method='BFGS', options={'disp': True})

运行后会得到预期的最小值点x=2,对应函数值为2。

场景2:你需要优化5维变量的目标函数

修改目标函数,将多维度的计算结果汇总为单个标量即可,比如对各维度的计算结果求和:

import numpy as np
def f(x):
    return np.sum((x - 2)**2) + 2

修改后调用原有minimize代码即可正常运行,最终得到的最优解每个维度都会趋近于2,对应函数值为2。

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:06:04