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

运行优化求极小值代码报错unhashable type: 'numpy.ndarray'求解决

错误根因

报错unhashable type: 'numpy.ndarray'是因为符号变量被意外覆盖导致的:

  • 代码开头x1,x2=sp.symbols('x1 x2')定义了sympy符号类型变量,用于符号求导和代入计算
  • 后续生成等高线网格时执行的[x1, x2] = np.meshgrid(X1, X2),直接将x1、x2的类型从sympy符号覆盖为了numpy数组
  • 调用f(x)、gradf(x)时,subs参数的字典需要用可哈希的符号变量做键,但此时x1、x2已经是不可哈希的numpy数组,直接触发类型错误。

修复方案

只需修改两处代码即可解决问题:

  1. 补充matplotlib导入,避免后续调用plt时报错,在导入代码块新增一行:
import matplotlib.pyplot as plt
  1. 修改网格相关变量名,避免覆盖符号变量,将原有网格生成代码:
[x1, x2] = np.meshgrid(X1, X2)
ff =x1**2/5+x2**2
plt.contour(x1, x2, ff, 20) # contour plot

替换为:

X1_grid, X2_grid = np.meshgrid(X1, X2)
ff = X1_grid**2/5 + X2_grid**2
plt.contour(X1_grid, X2_grid, ff, 20) # contour plot

补充说明

你代码中Momentum函数的参数名alphi为拼写失误,应为alpha;另外动量法的超参数beta通常取0.9左右的小于1的值,你当前传入的1会导致动量项无限累加,会影响收敛效果,可根据你的优化需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:45:03