研究好几天TAT,如题需要对nc文件提高分辨率,进行双线性差值时报错
原始文件:float hus(time=12, plev=17, lat=192, lon=288)
插值后目标:float hus(time=12, plev=17, lat=361, lon=720)
与其他文件不同点在于,大陆数据为缺失值nan
这是原始数据
for file in *.nc; do cdo remapbil,r720x361 "$file" "${file%.nc}_regrid.nc"; done
cdo差值后变成了
查看数据发现,出错的地方都是大陆区域(数据出现巨大值或巨小值)
而海洋区域数据与原始大致相同
于是想到简单处理办法(找了好几天问题在哪TAT)
只要把错误数据都设置为nan值(我这里设置了<-10和>10的值全部用nan代替)
import os
import numpy as np
import xarray as xr
from glob import glob
input_folder = r'E:\PMIP3\piControl\hus\huslist\plev17' # 输入文件夹路径
output_folder = r'E:\PMIP3\piControl\hus\huslist\plev17\modified' # 输出文件夹路径
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for input_file in glob(os.path.join(input_folder, '*.nc')):
ds = xr.open_dataset(input_file)
if 'hus' in ds:
ds['hus'] = ds['hus'].where((ds['hus'] >= -10) & (ds['hus'] <= 10), np.nan)
filename = os.path.basename(input_file)
output_file = os.path.join(output_folder, filename)
ds.to_netcdf(output_file)
print(f"处理完成: {input_file} -> {output_file}")
else:
print(f"文件 {input_file} 中没有 'hus' 变量,跳过处理。")
print("所有文件处理完成!")
输出文件:
问题解决!可以集合平均了!
图上可以看出可能还有一些小点数据有问题,但是无伤大雅,我决定不管