Я хотел бы применить пользовательскую функцию к переменной в xarray.Dataset
, изменяя только указанную переменную. В то же время я пытаюсь сделать эту часть графика вычислений dask
, чтобы ее можно было отложить до считывания на диск с помощью to_netcdf
.
На данный момент я могу применить ufunc
с помощью xr.apply_ufunc()
, но только ко всем переменным в наборе данных.
Я понимаю, что, вероятно, мог бы получить доступ к переменной напрямую, используя ее имя, например Dataset.var
, и передать это apply_ufunc()
, но я не совсем понимаю, как выходные данные этой функции (отложенное будущее) будут рекомбинированы с исходным набором данных перед выходом.
В идеале я хочу сделать что-то вроде этого (где 'data.nc'
имеет несколько переменных и только var1
возведен в квадрат).
import xarray as xr
from distributed import Client
dask_client = Client()
def square(x):
return x*x
data = xr.open_dataset('data.nc', chunks={'d1':10})
fut_sq = xr.apply_ufunc(square, data.var1, dask='parallelized', output_dtypes=['float'])
data.var1 = fut_sq.var1
fut_save = data.to_netcft('new.nc', compute=False)
dask_client.compute(fut_save)