Поиск полностью не-nan окон в DataArrayPython

Программы на Python
Ответить
Anonymous
 Поиск полностью не-nan окон в DataArray

Сообщение Anonymous »

У меня есть трехмерный DataArray, и я хотел бы определить индексы, в которых окно 3x3 в последних двух измерениях не содержит никаких nans.
Рассмотрим такие игрушечные данные:

Код: Выделить всё

np.random.seed(1234)
arr = np.random.rand(20, 10, 10)
arr[arr < 0.1] = np.nan
arr = xr.DataArray(arr, dims=["time", "x", "y"])
Мой подход — создать скользящий набор данных и уменьшить его, как показано ниже. Обратите внимание, что я не могу использовать arr.rolling(...).construct(...), потому что мои фактические данные слишком велики.

Код: Выделить всё

result = arr.rolling(center=True, x=3, y=3)\
.reduce(lambda x, axis: np.all(~np.isnan(x), axis=axis))
Кажется, это работает, но почему на выходе получается смесь nans и 1, а не nans, 1 и 0?

Код: Выделить всё

> result.isel(time=0)

array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan,  1.,  1., nan, nan, nan, nan],
[nan, nan, nan, nan,  1.,  1., nan, nan, nan, nan],
[nan, nan, nan, nan,  1., nan, nan, nan,  1., nan],
[nan, nan, nan, nan, nan, nan, nan, nan,  1., nan],
[nan, nan, nan, nan, nan, nan, nan, nan,  1., nan],
[nan,  1., nan, nan, nan, nan, nan, nan, nan, nan],
[nan,  1.,  1.,  1., nan, nan, nan, nan, nan, nan],
[nan,  1.,  1.,  1.,  1.,  1.,  1., nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]])
Я понимаю, что внешняя граница — нан, потому что там невозможно построить окно 3х3. Но я не понимаю, почему наны появляются и внутри массива. Если окно имеет nan, разве np.all не должен возвращать false, а затем приводить его к нулю?
Меня интересуют только ячейки с единицами, так что это не большое дело. Но мне любопытно узнать, почему это происходит.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -dataarray
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»