如何按指定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()
关键优化点
- 直接索引维度子集:避免复杂的二维掩码操作,通过
x_mask和y_mask直接提取vx2_d的行和列,得到二维子数组,保证维度正确。 - 重新生成网格:用筛选后的
x_sub和y_sub重新创建X_sub、Y_sub,确保网格与数据维度完全匹配,无需再对原始X、Y做复杂切片。 - 维度匹配验证:
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
相关产品推荐
相关产品推荐

