如何从128x128 dataframe矩阵生成等距网格用于插值
均匀网格调整操作方案
对于128x128的非均匀间距DataFrame网格,可通过坐标重采样+插值的方式生成等距规则网格,具体操作如下:
- 依赖工具安装:提前安装需要的计算库,执行
pip install numpy pandas scipy即可。 - 步骤1:提取原始网格的坐标与对应数值
根据你的DataFrame存储格式选择对应的提取方式:import numpy as np import pandas as pd from scipy.interpolate import griddata # 你的原始DataFrame变量,这里用df代指 # 存储格式1:三列结构,分别存横坐标x、纵坐标y、网格点数值value x_original = df["x"].values y_original = df["y"].values value_original = df["value"].values # 存储格式2:128行128列结构,行对应y坐标、列对应x坐标,单元格存网格点数值 # 需提前传入原始非均匀的列坐标列表x_list、行坐标列表y_list # x_original = np.tile(x_list, 128) # y_original = np.repeat(y_list, 128) # value_original = df.values.flatten() - 步骤2:生成等距新网格坐标
基于原始坐标的范围生成等间距的新网格,可自定义分辨率,此处保持128x128的尺寸不变:grid_size = 128 # 生成横纵方向的等距坐标 x_uniform = np.linspace(x_original.min(), x_original.max(), grid_size) y_uniform = np.linspace(y_original.min(), y_original.max(), grid_size) # 构建网格矩阵 X_uniform, Y_uniform = np.meshgrid(x_uniform, y_uniform) - 步骤3:插值得到均匀网格数值
可根据精度需求选择插值方法:# method参数可选:'nearest'(最近邻插值,速度最快)、'linear'(线性插值,精度速度平衡)、'cubic'(三次插值,结果最平滑) value_uniform = griddata((x_original, y_original), value_original, (X_uniform, Y_uniform), method="linear") # 结果转DataFrame,行索引为y坐标、列索引为x坐标 df_uniform_grid = pd.DataFrame(value_uniform, index=y_uniform, columns=x_uniform)
注意:如果原始数据存在缺失值,插值前需先做缺失值填充,否则结果会出现nan值;如果是带空间参考的地理网格数据,可改用xarray、rasterio的重采样工具,适配坐标系相关的特殊规则。
原始不均匀网格效果参考:
内容的提问来源于stack exchange,提问作者wosker4yan
相关产品推荐
相关产品推荐

