Мне нужно повысить дискретизацию с помощью линейной интерполяции некоторых спутниковых изображений, организованных в DataArray. Пока я не запустил код локально, у меня нет проблем, но если я попытаюсь воспроизвести интерполяцию в распределенной системе, я верну эту ошибку:
`Could not serialize object of type tuple`
, чтобы воспроизвести проблему, необходимо переключиться между распределенный или локальный env. вот распространенная версия кода.
n_time = 365
px = 2000
lat = np.linspace(19., 4., px)
lon = np.linspace(34., 53., px)
time = pd.date_range('1/1/2019', periods=n_time, freq='D')
data = xr.DataArray(np.random.random((n_time, px, px)), dims=('time', 'lat',
'lon'),coords={'time': time, 'lat': lat, 'lon': lon})
data = data.chunk({'time':1})
#upsampling
nlat = np.linspace(19., 4., px*2)
nlon = np.linspace(34., 53., px*2)
interp = data.interp(lat=nlat, lon=nlon)
computed = interp.compute()
Есть ли у кого-нибудь идеи и идеи о том, как обойти проблему?
РЕДАКТИРОВАТЬ 1:
Кажется, что я не Это было недостаточно ясно в моем первом MRE, поэтому я решил переписать все данные, полученные до сих пор. Мне нужно увеличить размер набора спутниковых данных с 500 до 250 метров. Конечная цель состоит в том, что, поскольку разбиение по измеряемому измерению еще не поддерживается **, выясните, как я могу создать обходной путь и повысить дискретизацию каждого изображения до 500 наборов данных.
px = 2000
n_time = 365
time = pd.date_range('1/1/2019', periods=n_time, freq='D')
# dataset to be upsampled
lat_500 = np.linspace(19., 4., px)
lon_500 = np.linspace(34., 53., px)
da_500 = xr.DataArray(dsa.random.random((n_time, px, px),
chunks=(1, 1000, 1000)),
dims=('time', 'lat', 'lon'),
coords={'time': time, 'lat': lat_500, 'lon': lon_500})
# reference dataset
lat_250 = np.linspace(19., 4., px * 2)
lon_250 = np.linspace(34., 53., px * 2)
da_250 = xr.DataArray(dsa.random.random((n_time, px * 2, px * 2),
chunks=(1, 1000, 1000)),
dims=('time', 'lat', 'lon'),
coords={'time': time, 'lat': lat_250, 'lon': lon_250})
# upsampling
da_250i = da_500.interp(lat=lat_250, lon=lon_250)
#fake index
fNDVI = (da_250i-da_250)/(da_250i+da_250)
fNDVI.to_netcdf(r'c:\temp\output.nc').compute()
проблема, и избегайте воздействия на память, как предлагает Райан. В любом случае два набора данных могут быть выгружены на диск, а затем перезагружены.
** примечание: кажется, что что-то движется для реализации интерполяции вместе с фрагментированным набором данных, но все еще не полностью доступно. Вот подробности https://github.com/pydata/xarray/pull/4155