Как я могу рассчитать ETP (Hargreaves) из NetCDF, используя xarray.apply_ufunc() с GroupBy

#netcdf #python-xarray

Вопрос:

Ниже показано, как я пытался вычислить ETP в NetCDF с помощью xarray_ufunc.

# stack the lat and lon dimensions into a new dimension named point, so at each lat/lon

# we'll have a time series for the geospatial point, and group by these points

tmin_da = ds.tmin.stack(point=('lat', 'lon')).groupby('point')

tmax_da = ds.tmax.stack(point=('lat', 'lon')).groupby('point')

tmean_da = ds.tmean.stack(point=('lat', 'lon')).groupby('point')

# apply the SPI function to the data array

ds = xr.apply_ufunc(eto.eto_hargreaves, tmin_da, tmax_da, tmean_da, latitude_degrees = np.linspace(23.125 , 49.125, 14))

Ошибка кода Значение истинности массива, содержащего более одного элемента, неоднозначно. Используйте.any() или. all()

Есть какие-либо предложения о том, какими должны быть входные данные, или другой простой метод?

Комментарии:

1. Вы должны поделиться кодом функции: eto.eto_hargreaves похоже, что вы создаете условное выражение, которое не соответствует массивам, которые вы передаете функции.

2. Сценарий по следующей ссылке включает eto.eto_hargreaves функцию (строка 304) и другие функции, необходимые для вычисления, с соответствующим описанием. Ссылка

3. Вы проверили использование функции eto.eto_hargreaves(tmin_da.values, tmax_da.values, tmean_da.values) ?

4. @dl.метео Спасибо за рекомендацию! Да, я сделал это, но это вызывает ту же ошибку. Однако я применил все функции в нем отдельно и получил свои результаты. Это занимает некоторое время, но все равно является хорошей альтернативой.