问题描述
我有一个 NetCDF 文件,其中包含指定坐标(由 110804 个节点组成的不规则网格)随时间变化的风况(速度、方向、u、v)。 纬度和经度存储为变量,这使得在空间维度(空间子集,在新网格上插值)处理数据集变得非常困难。
Dimensions: (node: 110804,time: 385)
Coordinates:
* time (time) datetime64[ns] 1999-12-15 ... 1999-12-31
Dimensions without coordinates: node
Data variables:
uwnd (time,node) float32 ...
vwnd (time,node) float32 ...
longitude (node) float32 -8.53543 -8.500304 -8.53419 ... -7.5 -7.5 -7.5
latitude (node) float32 51.632282 51.654434 51.65914 ... 50.8125 50.875
wndS (time,node) float32 9.426028 9.41913 ... 4.1617303 4.104875
wndDir (time,node) float32 -175.74115 -176.34778 ... 125.2176 124.07719
使用 xarray 打开数据集后,如何将变量“纬度”和“经度”转换为数据集的维度/坐标?
解决方法
您通常可以使用 NCO 执行此操作。以下将生成要尝试的命令:
nco_command = "ncatted "
lon_name = "longitude"
lat_name = "latitude"
variables = ["uwnd","vwnd","wndS","wndDir"]
for vv in variables:
nco_command += (
"-a coordinates," + vv + ",c,'" + lon_name + " " + lat_name + "' "
)
nco_command = nco_command + " infile.nc outfile.nc"
nco_command
当然,只需在命令行上运行并替换文件名即可。此代码将为 variables
下的所有变量列表添加新维度。这几乎总是适用于将变量转换为维度/坐标。