我使用
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 按什么顺序读取输入文件,以便我可以推断新维度的哪个值对应于哪个模拟?
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
在组合文件名之前对文件名进行排序:数据集将始终按照其名称的字典顺序进行组合。