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

如何按指定X、Y范围切片二维数组?代码优化求助

修复方案:提取指定范围二维子数组并绘制等高图

错误原因

你当前代码中,用二维布尔掩码mask直接索引vx2_d时,numpy会将所有True位置的元素提取为一维数组,这是布尔索引的特性,导致后续绘图因维度不匹配报错。

优化后的代码

import numpy as np
import matplotlib.pyplot as plt

# 假设x、y、vx2_d已定义
X, Y = np.meshgrid(x, y)

# 筛选x和y的目标范围,获取对应的索引
x_mask = (x >= 60) & (x <= 61.2)
y_mask = (y >= 1.42) & (y <= 1.72)

# 提取筛选后的x、y子集,重新生成网格(更直观且不易出错)
x_sub = x[x_mask]
y_sub = y[y_mask]
X_sub, Y_sub = np.meshgrid(x_sub, y_sub)

# 提取vx2_d的子数组:先取x维度的子集,再取y维度的子集
vx2_sub = vx2_d[x_mask, :][:, y_mask]

# 绘图:vx2_sub.T的形状与X_sub、Y_sub匹配
plt.pcolormesh(X_sub, Y_sub, vx2_sub.T, cmap=plt.cm.seismic)
plt.xlabel("Radial distance")
plt.ylabel("Angular distance")
plt.title("Dust Vx2 Contour plot")
plt.colorbar()
plt.show()

关键优化点

  1. 直接索引维度子集:避免复杂的二维掩码操作,通过x_mask和y_mask直接提取vx2_d的行和列,得到二维子数组,保证维度正确。
  2. 重新生成网格:用筛选后的x_sub和y_sub重新创建X_sub、Y_sub,确保网格与数据维度完全匹配,无需再对原始X、Y做复杂切片。
  3. 维度匹配验证:vx2_sub的形状为(len(x_sub), len(y_sub)),转置后vx2_sub.T的形状为(len(y_sub), len(x_sub)),与X_sub、Y_sub的形状一致,满足pcolormesh的输入要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:31:23