Я был удивлен, увидев определенный тип сеток. поведение вблизи края области 90 градусов северной широты для билинейной перераспределения температуры, когда я применил этот метод в своем рабочем процессе. Я пытался разобраться в этом, но мне интересно, что думают об этом другие.
Чтобы продемонстрировать проблему, я генерирую и отображаю некоторые синтетические данные на координатной сетке.

Затем я создаю целевой набор данных с более высоким разрешением и немного большим набором границ широты. Я также немного сместил долготу. Затем я создаю объект перераспределения и переключаю аргументы « periodic » и «unmapped_to_nan», чтобы проиллюстрировать проблему, с которой я сталкиваюсь, в четырех случаях.

По умолчанию (вверху слева) я вижу полосу нулей вдоль северная, восточная и южная окраины владения. Когда я устанавливаю «unmapped_to_nan=True» (вверху справа), становится ясно, что все эти нули появились, потому что целевая сетка имеет точки вне области исходного набора данных. Мне это кажется разумным.
Далее я устанавливаю period=True (вторая строка), и это то, что мне хотелось бы сделать при работе с данными, простирающимися вокруг Земли. Восточный край владений выглядит так, как я и ожидал. Это связано с тем, что периодическое измерение долготы позволяет нам заполнять точки, находящиеся «за пределами» области исходного набора данных. Северный и южный края домена снова равны нулю, предположительно потому, что они находятся за пределами домена. Однако, когда я устанавливаю «unmapped_to_nan=True», я фактически вижу, что точки вдоль северного края домена не находятся за пределами домена. Опять же, это имеет смысл, но я не понимаю, как заполняются эти точки.
(И я могу избежать этой проблемы, используя другой метод переопределения сетки.)
- Откуда берутся нулевые значения?
- Разумно ли это поведение? Возможно, я неправильно применил period=True, или, может быть, мне нужно быть более осторожным с тем, как мои сетки перекрываются.
- Я сталкиваюсь с той же проблемой, если у меня есть сетка, которая меняется с востока на запад. (см. ниже). Почему появляется повторяющееся значение, а не что-то, что также меняется с востока на запад?
- Это не решается установкой метода экстраполяции (nearest_s2d или inverse_dist), но я думаю, что это выровнено обнаружилось, что северный край целевого домена не рассматривается как «за пределами» исходного домена.

Код для воспроизведения:
import xarray as xr
import xesmf as xe
import numpy as np
import matplotlib.pyplot as plt
### Sample data that only varies north-to-south
### (converges to the same value at north pole and periodic in lon)
ds = xr.DataArray(data = np.arange(10, 89, dtype='float').repeat(12).reshape(-1,12),
dims=['lat','lon'],
coords={'lat': ('lat', np.arange(10.5, 89.5)),
'lon': ('lon', np.arange(-180, 180, 30))}).to_dataset(name='test_vals')
ds = ds.cf.guess_coord_axis().cf.add_bounds(('lat', 'lon'))
### Sample target grid
target_ds = xr.DataArray(dims=['lat','lon'],
coords={'lat': ('lat', np.arange(2/3, 90, 1/3)),
'lon': ('lon', np.arange(-180+0.5, 180+0.5, 30))}).to_dataset(name='test_vals')
### Plot initial data
ds.test_vals.plot(levels=np.arange(0, 90, 5))
plt.title('Original Data')
plt.show()
### Toggle settings and plot each version w/ same levels, add titles
n=0
fig, axs = plt.subplots(figsize=(6,8), nrows=2, ncols=2, gridspec_kw={'hspace':0.4, 'wspace':0.4},sharey=True)
for periodic in [False, True]:
for unmapped_to_nan in [False, True]:
regridder = xe.Regridder(ds, target_ds, 'bilinear', periodic=periodic, unmapped_to_nan=unmapped_to_nan)
rg_data = regridder(ds, keep_attrs=True)
levs = rg_data.test_vals.plot(ax=axs[n//2, n%2], levels=np.arange(0, 90, 5), add_colorbar=False)
axs[n//2, n%2].set_title(['Periodic' if periodic else 'Not Periodic'][0] + ' + ' + ['Unmapped -> Nan' if unmapped_to_nan else 'Unmapped -> Zero'][0], fontsize='small')
n+=1
fig.suptitle('Regridded Data (various settings)')
plt.show()
Подробнее здесь: https://stackoverflow.com/questions/791 ... -regridder
Мобильная версия