【问题标题】:Error on using xarray open_mfdataset function使用 xarray open_mfdataset 函数时出错
【发布时间】:2017-01-26 11:46:24
【问题描述】:

我正在尝试合并多个相同尺寸的netCDF文件,它们的尺寸如下:

OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])

但是,在使用 open_mfdataset 时,我收到此错误:

xr.open_mfdataset(path_file, decode_times=False)

*** ValueError: cannot infer dimension to concatenate: supply the ``concat_dim`` argument explicitly

如何解决这个错误?我的尺寸在所有文件中都相同

【问题讨论】:

    标签: python numpy netcdf python-xarray netcdf4


    【解决方案1】:

    http://xarray.pydata.org/en/stable/generated/xarray.open_mfdataset.html

    xarray.open_mfdataset(paths, chunks=None, concat_dim=None, preprocess=None, engine=None, lock=None, **kwargs)
    

    看起来它需要你提供一个concat_dim 参数。它无法从您的数据中推断出来。

    连接文件的维度。此参数与数据集对象一起传递给 xarray.auto_combine()。仅当您要连接的维度不是原始数据集中的维度时,您才需要提供此参数,例如,如果您希望沿第三个维度堆叠二维数组的集合。

    这些 3d 数组是否要沿新的第四维度堆叠?

    【讨论】:

    • 感谢@hpaulj,我不确定它为什么会出现问题。也不确定 concat_dim 所需的格式。文档说它应该是字符串或数据数组,但我有 4 个维度:lat、loon、time、nv
    • 这些 netCDF 文件具有完全相同的尺寸,但变量不同。我希望输出 netCDF 文件包含所有不同的变量,当然还有尺寸
    【解决方案2】:

    出现此错误消息可能是因为您有两个具有相同变量和坐标值的文件,而 xarray 不知道是否应该将它们沿新维度堆叠在一起,或者只是检查以确保没有值冲突。

    如果用concat_dim=None 显式调用open_mfdataset 禁用所有连接尝试会很好。 This change 应该会在下一个版本的 xarray (v0.9.0) 中使用。

    与此同时,您可以通过单独打开文件并明确合并它们来解决此问题,例如,

    def open_mfdataset_merge_only(paths, **kwargs):
        if isinstance(paths, basestring):
            paths = sorted(glob(paths))
        return xr.merge([xr.open_dataset(path, **kwargs) for path in paths])
    

    在幕后,这基本上就是open_mfdataset 所做的一切。

    【讨论】:

    • 感谢@Stephan,将使用它。期待 v0.9!
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多