多维数组是处理网格计算最自然高效的数据结构;numpy通过array、zeros、ones、meshgrid创建规则网格,支持矢量化运算、切片提取与布尔索引更新。

多维数组是处理网格计算任务最自然、最高效的数据结构。它把空间位置和数值数据统一组织成规则的索引结构,让坐标访问、区域操作和批量运算变得直接而快速。
用 NumPy 创建结构化网格
多数网格计算始于一个规则的二维或三维阵列。NumPy 的 array、zeros、ones 和 meshgrid 是核心工具:
- 用 np.zeros((m, n)) 初始化 m×n 网格,适合模拟初始状态(如温度场、压力场)
- 用 np.meshgrid(x, y) 生成坐标矩阵 X 和 Y,每个 (X[i,j], Y[i,j]) 对应网格点位置,便于后续计算函数值(如 f(x,y) = sin(X)*cos(Y))
- 若需非均匀网格,可先构造非等距的一维坐标数组(如 np.logspace 或自定义列表),再传入 meshgrid
对网格点做批量数学运算
避免 for 循环,直接在整张网格数组上应用运算符或函数,即“矢量化”:
- 标量运算自动广播:例如 grid * 2 + 1 会作用于每个元素
- 函数逐点计算:如 np.sqrt(X**2 + Y**2) 得到每个点到原点的距离
- 条件赋值用 np.where:例如 np.where(grid > threshold, 1, 0) 实现二值化
- 统计操作面向整个网格:用 grid.mean()、grid.max(axis=0)(按列求最大)等快速提取特征
按坐标或区域提取与更新子网格
网格常需局部操作,NumPy 切片和布尔索引非常高效:
- 矩形区域:如 grid[2:5, 3:7] 提取第2–4行、第3–6列的子块
- 边界更新:用切片赋值,如 grid[0, :] = 0(上边界置零)、grid[:, -1] = 1(右边界设为1)
- 不规则区域:先构造布尔掩码,例如 mask = (X**2 + Y**2) ,再用 grid[mask] = new_value 更新圆内所有点
结合 Pandas 处理带标签的网格数据
当网格维度带有语义名称(如“时间”“纬度”“产品类别”),Pandas 的 DataFrame 或 xarray 更易读易维护:
- 用 pd.DataFrame(grid, index=latitudes, columns=longitudes) 把数值网格转为地理坐标可查表
- 支持按标签切片:df.loc[30:40, '2020-01':'2020-12'] 比位置索引更直观
- 数据透视表(pivot_table)可将长格式数据自动重构成二维网格视图,适合汇总报表类任务











