为 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=1
、identifyer=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
在组合文件名之前对文件名进行排序的事实:数据集将始终按字典顺序组合他们的名字顺序。
我正在使用 xarray.open_mfdataset()
打开和合并 8 个 netcdf 文件(来自具有不同设置的模型模拟的输出)而不将它们加载到内存中。如果我指定 concat_dim='run_number'
,这会很好用,它将 run_number
添加为没有坐标的维度,并只用 0 到 7 的值填充它。
问题是现在,我不知道哪个run_number属于哪个模拟。原始的 netcdf 都具有帮助我区分它们的属性,例如identifyer=1
、identifyer=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
在组合文件名之前对文件名进行排序的事实:数据集将始终按字典顺序组合他们的名字顺序。