Можно применить scipy.stats.linregress
(и другие не-уфунки) к набору данных xarray, используя apply_ufunc()
, передав vectorize=True
следующим образом:
# return a tuple of DataArrays
res = xr.apply_ufunc(scipy.stats.linregress, ds[x], ds[y],
input_core_dims=[['year'], ['year']],
output_core_dims=[[], [], [], [], []],
vectorize=True)
# add the data to the existing dataset
for arr_name, arr in zip(array_names, res):
ds[arr_name] = arr
Хотя все еще последовательный, apply_ufunc
примерно в 36 раз быстрее, чем реализация цикла в этом конкретном случае.
Однако распараллеливание с dask по-прежнему не реализовано с несколькими выходами, например, из scipy.stats.linregress
:
NotImplementedError: несколько выходов из apply_ufunc еще не поддерживаются с dask = 'parallelized'