绘制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()
关键修正点说明
- 移除了无意义的
m = np.array(x,y)代码,彻底解决TypeError - 用
np.meshgrid()生成二维网格X、Y,确保计算出的Z是符合热力图要求的二维数组 - 给
imshow添加extent参数对应真实坐标范围,origin='lower'让y轴方向符合常规坐标系 - 补充了颜色条、标题和坐标轴标签,让可视化结果更清晰直观
备注:内容来源于stack exchange,提问作者venusrainbow
相关产品推荐
相关产品推荐

