使用matplotlib.pyplot的contour函数时遇tuple index out of range错误
解决matplotlib contour函数的"tuple index out of range"错误
问题根源分析
你的代码存在几个关键问题:
make_regression生成的x是**(100,1)的二维数组**,直接传入meshgrid会导致生成的xmesh、ymesh带有多余维度(形状为(100,100,1)),后续计算的z维度不匹配contour的要求。- 函数
f的输入逻辑错误,你试图传入包含xmesh和ymesh的数组,但函数内部的运算无法正确处理这种多维结构,导致z的形状不符合contour的二维数组要求。 - 提前执行
print("z: ", z.shape)时,z还未定义,会先触发NameError。
修正后的代码
import numpy as np from sklearn.datasets import make_regression import matplotlib.pyplot as plt # 生成数据并展平x为一维数组 x, y = make_regression(n_samples=100, n_features=1, noise=10) x = x.flatten() # 把(100,1)转为(100,)的一维数组 y = y + abs(y/2) # 定义接受x和y两个参数的函数,计算每个网格点的z值 def f(x_val, y_val): return x_val**2 + y_val**2 + x_val + y_val # 示例双变量函数,可根据需求修改 # 生成二维网格 xmesh, ymesh = np.meshgrid(x, y) # 计算每个网格点的z值 z = f(xmesh, ymesh) # 打印形状验证 print("xmesh :", xmesh.shape) print("ymesh :", ymesh.shape) print("z: ", z.shape) # 绘制等高线 plt.contour(X=xmesh, Y=ymesh, Z=z, levels=20) plt.show()
关键修正点
- 用
x.flatten()将二维的x转为一维,确保meshgrid生成的xmesh、ymesh是**(100,100)的二维数组**。 - 修改函数
f为接受两个参数,直接对二维网格数组进行逐元素运算,生成同样二维的z数组,符合contour的输入要求。 - 将
print(z.shape)移到z定义之后,避免未定义错误。
内容的提问来源于stack exchange,提问作者problème0123
相关产品推荐
相关产品推荐

