首页 > 解决方案 > 如何在 xarray 数据集中使用纬度和经度变量作为维度/坐标?

问题描述

我有一个 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 打开数据集后,如何将变量“纬度”和“经度”转换为数据集的维度/坐标?

标签: pythonmultidimensional-arraynumpy-ndarraypython-xarraydimensions

解决方案


您通常可以使用 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,c,'" + lon_name + " " + lat_name + "' "
    )
nco_command = nco_command + " infile.nc outfile.nc"
nco_command

当然,只需在命令行上运行它并替换文件名。此代码将为下的所有变量列表添加新维度variables。这几乎总是适用于将变量转换为尺寸/坐标。


推荐阅读