【问题标题】:Issues with Scipy interpolate griddataScipy 插值网格数据的问题
【发布时间】:2022-01-21 11:09:47
【问题描述】:

我有一个空间分辨率为 0.05º 的 netcdf file,我想将其重新网格化为 0.01º 的空间分辨率,例如 this other netcdf。我尝试使用 scipy.interpolate.griddata,但我并没有真正到达那里,我认为我缺少一些东西。

original_dataset = xr.open_dataset('to_regrid.nc')
target_dataset= xr.open_dataset('SSTA_L4_MED_0_1dg_2022-01-18.nc')

根据scipy.interpolate.griddata documentation,我需要构建我的插值管道如下:

grid = griddata(points, values, (grid_x_new, grid_y_new), 方法='最近的')

所以在我的情况下,我认为它会如下:

#Saving in variables the old and new grids
grid_x_new = target_dataset['lon']
grid_y_new = target_dataset['lat']
grid_x_old = original_dataset ['lon']
grid_y_old = original_dataset ['lat']

points = (grid_x_old,grid_y_old)
values = original_dataset['analysed_sst'] #My variable in the netcdf is the sea surface temp.

现在,当我运行 griddata 时:

from scipy.interpolate import griddata
grid = griddata(points, values, (grid_x_new, grid_y_new),method='nearest')

我收到以下错误:

ValueError:形状不匹配:对象不能广播到单个 形状

我认为它与 lat/lon 数组形状有关。我对 netcdf 领域很陌生,我真的不知道这里有什么问题。任何帮助将不胜感激!

【问题讨论】:

    标签: python scipy grid interpolation netcdf


    【解决方案1】:

    在您的原始代码中,grid_x_old 和 grid_y_old 中的索引应对应于数据集中的每个唯一坐标。为了使事情正常工作,如下所示:

    import xarray as xr
    from scipy.interpolate import griddata
    original_dataset = xr.open_dataset('to_regrid.nc')
    target_dataset= xr.open_dataset('SSTA_L4_MED_0_1dg_2022-01-18.nc')
    #Saving in variables the old and new grids
    grid_x_old = original_dataset.to_dataframe().reset_index().loc[:,["lat", "lon"]].lon
    grid_y_old = original_dataset.to_dataframe().reset_index().loc[:,["lat", "lon"]].lat
    
    grid_x_new = target_dataset.to_dataframe().reset_index().loc[:,["lat", "lon"]].lon
    grid_y_new = target_dataset.to_dataframe().reset_index().loc[:,["lat", "lon"]].lat
    values = original_dataset.to_dataframe().reset_index().loc[:,["lat", "lon", "analysed_sst"]].analysed_sst
    points = (grid_x_old,grid_y_old)
    grid = griddata(points, values, (grid_x_new, grid_y_new),method='nearest')
    

    【讨论】:

    • 成功了。非常感谢@罗伯特·威尔逊!!
    【解决方案2】:

    我建议使用 xesm 重新网格化 xarray 数据集。下面的代码将重新排列您的数据集:

    import xarray as xr
    import xesmf as xe
    original_dataset = xr.open_dataset('to_regrid.nc')
    target_dataset= xr.open_dataset('SSTA_L4_MED_0_1dg_2022-01-18.nc')
    regridder = xe.Regridder(original_dataset, target_dataset, "bilinear")
    dr_out = regridder(original_dataset)
    

    【讨论】:

    • 感谢您的回答! xesmf 的问题在于,正如他们所说,ESMPy conda 包目前仅适用于 Linux 和 Mac OSX,不适用于我正在使用的 windows。
    猜你喜欢
    • 2021-09-09
    • 2019-06-02
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多