Код: Выделить всё
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 Подробнее здесь: https://stackoverflow.com/questions/793 ... -dataarray