Xarray comb_by_coords возвращает ошибку глобального индекса monotoni c - PullRequest
2 голосов
/ 09 июля 2020

Я пытаюсь объединить два набора пространственных данных xarray с помощьюcommon_by_coords. Эти два набора данных представляют собой две плитки рядом друг с другом. Итак, есть перекрывающиеся координаты. В перекрывающихся регионах значения переменных одного из наборов данных равны nan.

Я использовал "comb_by_coords" с опцией compat = 'no_conflicts'. Однако он возвращает глобальные индексы monotoni c по измерению y error. Похоже, это была проблема раньше, но она была исправлена ​​( здесь ). Поэтому я действительно не знаю, почему я получаю эту ошибку. Вот пример (плитки netcdf здесь ):

import xarray as xr

print(xr.__version__)
>>>0.15.1

ds1=xr.open_dataset('Tile1.nc')
ds2=xr.open_dataset('Tile2.nc')
ds = xr.combine_by_coords([ds1,ds2], compat='no_conflicts')
>>>...
 ValueError: Resulting object does not have monotonic global indexes along dimension y

Спасибо

1 Ответ

1 голос
/ 12 июля 2020

Это не ошибка, это выдает ошибку, которую он должен выдавать с учетом вашего ввода. Однако я вижу, что в документации не очень ясно, почему это происходит!

combine_by_coords и combine_nested делают две вещи: они объединяются (используя xr.concat), и они объединяются (используя xr.merge). merge группирует переменные одинакового размера, concat объединяет переменные разных размеров на концах друг друга. Шаг конкатенации никогда не должен обрабатывать частично перекрывающиеся координаты, поэтому функции combine имеют такое же ограничение.

Эта ошибка является явным отклонением введенного вами ввода: «вы дали мне перекрывающиеся координаты, Я не знаю, как их объединить, поэтому отвергну их ". Обычно это имеет смысл - когда перекрывающиеся координаты не являются NaN, тогда неоднозначно, какие значения выбрать.

В вашем случае вы просите его выполнить четко определенную операцию, и обсуждение в документы о слиянии перекрывающихся координат здесь подразумевают, что compat='no_conflicts' справится с этой ситуацией. К сожалению, это только для xr.merge, а не xr.concat, поэтому это не относится и к combine_by_coords. Это определенно сбивает с толку.

Возможно, возможно обобщить функции combine для обработки сценария, который вы описываете (где перекрывающиеся части координат полностью задаются не -NaN значения). Пожалуйста, откройте проблему, предлагающую эту функцию, если вы хотите ее увидеть.

(Проблема # 3150 касалась чего-то другого, фактической ошибки в обработке "координатных размеров, которые не меняются между каждым набором данных ".)

Вместо этого вам нужно сначала обрезать перекрытие. Это не должно быть сложно - предположительно, вы знаете (или можете определить), насколько велико ваше перекрытие, и все ваши NaN находятся в одном наборе данных. Вам просто нужно использовать метод .isel() со срезом. После того, как вы избавитесь от перекрывающихся NaN, вы сможете правильно их комбинировать (и вам также не нужно указывать compat). Если вы используете combine_by_coords как часть открытия многих файлов с помощью open_mfdataset, тогда может быть проще написать функцию обрезки, которую вы сначала примените, используя аргумент preprocess для open_mfdataset.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...