Как использовать логическое индексирование для набора данных xarray? - PullRequest
0 голосов
/ 06 февраля 2020

В xarray, почему логическое индексирование использует различный синтаксис между DataArray и Dataset?

ds = xr.Dataset(dict(arr=(['time', 'space'], np.random.random((5,5)))), 
                dict(time=[1,2,3,4,5], space=[2,3,4,5,6]))
selection = ds.time % 2 == 0

Здесь selection - это логический массив с координатой time. Почему ds[selection] терпит неудачу (с KeyError)?

Обратите внимание, что ds.arr[selection] работает (принимая подмножество DataArray, где координата time четна). Кроме того, ds.sel(time=selection) работает, но не является ли это избыточным или fr agile (ожидая, что одна и та же координата будет названа как в метаданных selection DataArray, так и в аргументе ключевого слова .sel)? Что если я хочу использовать многомерный логический массив?

1 Ответ

1 голос
/ 07 февраля 2020

Индексирование набора данных (т. Е. ds[selection]) всегда выбирает переменную из набора данных; поэтому нет никакой двусмысленности с индексированием по переменным. Хотя некоторые операции над наборами данных эквивалентны сопоставлению операции с ее переменными и агрегированию результатов, не все.

Re с использованием многомерного логического массива; Вы можете использовать .where. Вы не можете использовать многомерный логический массив напрямую; из документов :

В качестве индексаторов можно использовать только одномерные логические массивы.

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