Поиск полностью не наныPython

Программы на Python
Anonymous
 Поиск полностью не наны

Сообщение Anonymous »

У меня есть трехмерный диаграмма данных, и я хотел бы идентифицировать индексы, в которых окно 3x3 в последних двух измерениях не содержит никаких NANS. < /p>

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

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"])
< /code>
Мой подход состоит в том, чтобы создать набор данных и уменьшить, как ниже. Обратите внимание, что я не могу использовать arr.rolling (...). Construct (...) 
Потому что мои фактические данные слишком велики.

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

result = arr.rolling(center=True, x=3, y=3)\
.reduce(lambda x, axis: np.all(~np.isnan(x), axis=axis))
< /code>
Это, кажется, работает, но почему вывод - смесь NAN и 1S вместо NANS, 1S и 0S? < /p>
> 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]])
< /code>
Я понимаю, что внешняя граница - это НАН, потому что там не может быть построено окно 3x3. Но я не понимаю, почему NANS появляется и в внутренней части массива. Если у окна есть NAN, не должен ли np.all 
вернуть false, а затем поднять это на ноль? Большое дело. Но мне любопытно узнать, почему это происходит.

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

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