使用Xarray对NetCDF数据进行经纬度重采样
import xarray as xr
# 读取数据
path = '/home/yaodianwen/tp_era5_3hrsum_mekong_mm_defined_invalid_pr.nc'
data = xr.open_dataset(path)
# 获取经纬度变量名
lon_var, lat_var = list(data.coords.keys())[:2]
# 确定新的经纬度范围和间隔
new_lon = data[lon_var].values[::2]
new_lat = data[lat_var].values[::2]
# 重采样
data_resampled = data.sel({lat_var: new_lat, lon_var: new_lon}).resample({lat_var: '0.5°', lon_var: '0.5°'}).mean()
# 保存结果
new_path = '/home/yaodianwen/tp_era5_3hrsum_mekong_mm_defined_invalid_pr_interp.nc'
data_resampled.to_netcdf(new_path)
代码解释:
-
导入xarray库:
import xarray as xr- 导入用于处理NetCDF数据的Python库xarray。
-
读取数据:
data = xr.open_dataset(path)- 使用
xr.open_dataset()函数读取指定路径的NetCDF文件,并将其存储在data变量中。
- 使用
-
获取经纬度变量名:
lon_var, lat_var = list(data.coords.keys())[:2]- 获取NetCDF数据集中经度和纬度变量的名称,并将其分别存储在
lon_var和lat_var变量中。
- 获取NetCDF数据集中经度和纬度变量的名称,并将其分别存储在
-
确定新的经纬度范围和间隔:
new_lon = data[lon_var].values[::2]和new_lat = data[lat_var].values[::2]- 使用切片操作
[::2]选择原始经纬度数据中每隔一个值,生成新的经纬度数组,实现将分辨率从0.25°变为0.5°。
- 使用切片操作
-
重采样:
data_resampled = data.sel({lat_var: new_lat, lon_var: new_lon}).resample({lat_var: '0.5°', lon_var: '0.5°'}).mean()- 使用
sel方法选择新的经纬度范围, 使用resample方法以0.5°间隔对经度和纬度进行重采样,并使用mean()函数计算每个新网格内的平均值。
- 使用
-
保存结果:
data_resampled.to_netcdf(new_path)- 使用
to_netcdf()函数将重采样后的数据保存到新的NetCDF文件中,文件路径为new_path。
- 使用
这段代码展示了如何使用Xarray库对NetCDF数据进行经纬度重采样。通过调整resample()方法中的参数,您可以根据需要更改重采样的分辨率和方法。
原文地址: https://www.cveoy.top/t/topic/btEh 著作权归作者所有。请勿转载和采集!