Ошибка при использовании функции xarray open_mfdataset

Я пытаюсь объединить несколько файлов 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

Как исправить эту ошибку? У меня размеры одинаковые во всех файлах


person user308827    schedule 18.09.2016    source источник


Ответы (2)


Это сообщение об ошибке, вероятно, возникает из-за того, что у вас есть два файла с одинаковыми переменными и значениями координат, и xarray не знает, следует ли складывать их вместе по новому измерению или просто проверять, чтобы ни одно из значений не конфликтовало.

Было бы неплохо, если бы явный вызов open_mfdataset с concat_dim=None отключил все попытки конкатенации. Это изменение должно войти в следующий выпуск 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.

person shoyer    schedule 19.09.2016
comment
спасибо @Stephan, воспользуюсь этим. с нетерпением жду v0.9! - person user308827; 19.09.2016

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 () вместе с объектами набора данных. Вам нужно указать этот аргумент только в том случае, если измерение, по которому вы хотите объединить, не является измерением в исходных наборах данных, например, если вы хотите сложить коллекцию 2D-массивов по третьему измерению.

Это трехмерные массивы, которые вы хотите сложить в новом, 4-м измерении?

person hpaulj    schedule 18.09.2016
comment
спасибо @hpaulj, я не уверен, почему у него проблема. также не уверен в формате, необходимом для concat_dim. В документации указано, что это должна быть строка или массив данных, но у меня есть 4 измерения: широта, гагара, время, нв. - person user308827; 19.09.2016
comment
эти файлы netCDF имеют точно такие же размеры, но разные переменные. Я хочу, чтобы выходной файл netCDF содержал все разные переменные и, конечно же, размеры - person user308827; 19.09.2016