为xarray open_mfdataset指定concat_dim

问题描述 投票:0回答:1

我使用

xarray.open_mfdataset()
打开并组合 8 个 netcdf 文件(具有不同设置的模型模拟的输出),而不将它们加载到内存中。如果我指定
concat_dim='run_number'
,这会非常有效,它将
run_number
添加为没有坐标的维度,并仅用 0 到 7 之间的值填充它。

问题是现在,我不知道哪个run_number属于哪个模拟。原始的 netcdf 都有可以帮助我区分它们的属性,例如

identifyer=1
identifyer=2
等,但是即使我指定了
concat_dim='identifyer'
,这也不能被xarray识别(也许是因为属性很多?)。

有什么方法可以告诉 xarray 它必须使用此属性作为

concat_dim
?或者,xarray 按什么顺序读取输入文件,以便我可以推断新维度的哪个值对应于哪个模拟?

python python-xarray
1个回答
4
投票

Xarray 将使用现有标量坐标的值来标记结果坐标,但它不考虑属性。仅查看坐标中找到的元数据是 xarray 中的通用主题:我们仅将

attrs
留给用户代码。因此,这应该可以为每个数据集分配标量
'identifyer'
坐标,例如,使用
preprocess
参数给
open_mfdataset
:

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

xarray.open_mfdataset(path, preprocess=add_id)

或者,您可以将显式文件名列表传递给

open_mfdataset
,或者依靠
open_mfdataset
在组合文件名之前对文件名进行排序:数据集将始终按照其名称的字典顺序进行组合。

© www.soinside.com 2019 - 2024. All rights reserved.