为 xarray open_mfdataset 指定 concat_dim

Specify concat_dim for xarray open_mfdataset

我正在使用 xarray.open_mfdataset() 打开和合并 8 个 netcdf 文件(来自具有不同设置的模型模拟的输出)而不将它们加载到内存中。如果我指定 concat_dim='run_number',这会很好用,它将 run_number 添加为没有坐标的维度,并只用 0 到 7 的值填充它。

问题是现在,我不知道哪个run_number属于哪个模拟。原始的 netcdf 都具有帮助我区分它们的属性,例如identifyer=1identifyer=2等,但是这个xarray不识别,即使我指定了concat_dim='identifyer'(可能是因为有很多属性?)。

有什么方法可以告诉 xarray 它必须将此属性用作 concat_dim?或者,xarray 以什么顺序读取输入文件,以便我可以推断出新维度的哪个值对应于哪个模拟?

Xarray 将使用现有标量坐标的值来标记结果坐标,但它不会查看属性。仅查看坐标中的元数据是 xarray 中的 general theme:我们仅将 attrs 留给用户代码。因此,这应该可以为每个数据集分配标量 'identifyer' 坐标,例如,使用 preprocess 参数 open_mfdataset:

def add_id(ds):
    ds.coords['identifyer'] = ds.attrs['identifyer']

xarray.open_mfdataset(path, preprocess=add_id)

或者,您可以将文件名的显式列表传递给 open_mfdataset,或者依赖于 open_mfdataset 在组合文件名之前对文件名进行排序的事实:数据集将始终按字典顺序组合他们的名字顺序。