【问题标题】:Specify concat_dim for xarray open_mfdataset为 xarray open_mfdataset 指定 concat_dim
【发布时间】:2017-03-04 01:10:36
【问题描述】:

我正在使用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 以什么顺序读取输入文件,以便我可以推断新维度的哪个值对应于哪个模拟?

【问题讨论】:

    标签: python python-xarray


    【解决方案1】:

    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在组合文件名之前对文件名进行排序这一事实:数据集将始终按其名称的字典顺序组合。

    【讨论】:

    • 一个小评论:我必须将return ds 添加到函数中才能正常工作。
    猜你喜欢
    • 2017-01-26
    • 1970-01-01
    • 2021-03-30
    • 2021-10-29
    • 2021-01-06
    • 2020-09-01
    • 2017-04-07
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多