CMIP6 nc 文件降尺度

导入相关包

1
2
import xarray as xr
import numpy as np

降尺度

  本代码以经纬度分割后的数据为例将 nc 文件进行线性插值降尺度到 0.5*0.5。

1
2
3
4
5
6
7
8
9
10
new_lon = np.arange(70, 140, 0.5)  # 经度范围及目标尺度
new_lat = np.arange(15, 60, 0.5) # 纬度范围及目标尺度
# 多文件处理可以采用循环
for year in range(2015, 2040):
# 打开文件
ori_data = xr.open_dataset('CMIP6/pr_China/pr_China_' + str(year) + '.nc')
new_data = ori_data.interp(lat=new_lat, lon=new_lon) # 线性插值
# 输出路径
new_data.to_netcdf('CMIP6_0.5/pr_China_0.5/pr_China_0.5_' + str(year) + '.nc')
print(str(year) + 'success')

CMIP6 中的经度为(0,360),其中(0,180)为东经,(180,360)为西经,所以可以很方便地插值。但是有的 nc 文件经度为(-180,180),其中(-180,0)为西经,(0,-180)为东经,因此不能直接插值,需要重写一下经度,并在变量层重新做映射,再插值。

如果要对多个 nc 文件做插值,一般用到循环,需在每次转存结束后释放内存,防止内存溢出。