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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:25:19