You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

WRF输出转NetCDF后XTIME移除及XLAT/XLONG维度调整问题

WRF合并NetCDF文件的两个问题解决方案

问题1:移除输出文件中的XTIME变量

XTIME是WRF输出文件默认携带的时间变量,即便未显式提取,xarray读取时会默认加载所有变量。解决方式有两种:

方法1:读取时直接排除XTIME

在读取单个WRF文件阶段,通过drop_variables参数跳过XTIME,从源头避免带入合并流程:

import xarray as xr
import glob

# 获取当月所有目标wrfout文件
file_list = sorted(glob.glob("wrfout_d02_2020-01-*_00:00:00"))
# 读取时排除XTIME变量
ds_list = [xr.open_dataset(f, drop_variables=['XTIME']) for f in file_list]
# 合并数据集
merged_ds = xr.concat(ds_list, dim='Time')

方法2:合并后删除XTIME

若已完成合并操作,直接在最终数据集上删除该变量:

merged_ds = merged_ds.drop_vars('XTIME')

问题2:将XLAT/XLONG转为二维格式并调整变量顺序

WRF输出的XLAT/XLONG虽带有Time、ymd维度,但各时间步的经纬度值完全一致,可提取单时间步数值去除冗余维度,再重新添加并调整变量顺序:

# 提取第一个时间步的XLAT/XLONG,去除Time和ymd维度
xlat_2d = merged_ds['XLAT'].isel(Time=0, ymd=0).squeeze()
xlong_2d = merged_ds['XLONG'].isel(Time=0, ymd=0).squeeze()

# 删除原有的多维度XLAT/XLONG
merged_ds = merged_ds.drop_vars(['XLAT', 'XLONG'])

# 添加二维格式的XLAT/XLONG,指定维度为(south_north, west_east)
merged_ds['XLAT'] = (('south_north', 'west_east'), xlat_2d.values)
merged_ds['XLONG'] = (('south_north', 'west_east'), xlong_2d.values)

# 调整变量顺序,将XLAT、XLONG置于最前列
var_order = ['XLAT', 'XLONG'] + [var for var in merged_ds.data_vars if var not in ['XLAT', 'XLONG']]
merged_ds = merged_ds[var_order]

最终保存文件

完成上述修改后,保存为目标格式的NetCDF文件:

output_path = "WRF_PGW_2C_re-202001-d02-hourly.nc"
merged_ds.to_netcdf(output_path, format='NETCDF4', complevel=4)

内容的提问来源于stack exchange,提问作者rock0789

火山引擎 最新活动