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

绘制Goldstein函数2D热力图时遭遇TypeError错误求助

绘制Goldstein函数2D热力图时遭遇TypeError错误求助

我看了你的代码和报错信息,问题其实很清晰,咱们一步步来解决:

首先解决触发TypeError的直接原因

你在goldstein_func里写的m = np.array(x,y)是错误的用法:

  • np.array()的第一个参数需要是可迭代对象(比如列表、元组),如果想把x和y合并成数组,应该写成np.array([x, y])
  • 更关键的是,这段代码里的m变量完全没被使用,属于多余代码,直接删掉就能解决这个类型错误!

然后解决热力图的核心问题(一维数组转二维网格)

你的x和y都是一维的linspace数组,直接代入函数计算得到的z也是一维的,但plt.imshow()要求输入二维数组(对应网格状的函数值分布)。所以我们需要用np.meshgrid()把一维坐标转换成二维网格矩阵。

修正后的完整代码

import numpy as np
import matplotlib.pyplot as plt

def goldstein_func(x, y):
    # 保留原函数的计算逻辑,此时x和y是二维网格数组
    z = (1 + (x + y + 1)**2 * (19 - 14*x + 3*x**2 -14*y +6*x*y +3*y**2)) * \
        (30 + (2*x -3*y)**2 * (18 -32*x +12*x**2 +48*y -36*x*y +27*y**2))
    return z

# 生成一维坐标数组
x = np.linspace(-2, 2, num=40)
y = np.linspace(-2, 2, num=40)

# 将一维坐标转换为二维网格矩阵
X, Y = np.meshgrid(x, y)

# 计算每个网格点的函数值,得到二维数组Z
Z = goldstein_func(X, Y)

# 绘制热力图,添加坐标范围、颜色映射和辅助元素
plt.imshow(Z, extent=[-2, 2, -2, 2], origin='lower', cmap='viridis')
plt.colorbar(label='Goldstein Function Value')
plt.title('Goldstein Function Heatmap')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

关键修正点说明

  1. 移除了无意义的m = np.array(x,y)代码,彻底解决TypeError
  2. 用np.meshgrid()生成二维网格X、Y,确保计算出的Z是符合热力图要求的二维数组
  3. 给imshow添加extent参数对应真实坐标范围,origin='lower'让y轴方向符合常规坐标系
  4. 补充了颜色条、标题和坐标轴标签,让可视化结果更清晰直观

备注:内容来源于stack exchange,提问作者venusrainbow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:47:41