Метод выбора набора данных xarray очень медленный - PullRequest
0 голосов
/ 06 июня 2019

У меня 37 лет файлов NetCDF с ежедневным шагом по времени и вычислением функции для каждой ячейки за все годы (13513 дней).Вычисление этой функции повторяется для всех ячеек.Для этого я использую xarray и da.sel, но он очень медленный и не использует несколько ядер моего ноутбука.Я изо всех сил пытаюсь понять, как использовать dask в текущем сценарии.Любые предложения по улучшению / ускорению кода?

for c in range(len(df)):
    arr = np.array([])
    lon=df.X[c]
    lat=df.Y[c]
    for yr in range(1979,2016,1):
        ds = xr.open_dataset('D:/pr_'+str(yr)+'.nc')
        da = ds.var.sel(lon=lon, lat=lat, method='nearest')
        arr = np.concatenate([arr, da])

    fun = function(arr)

1 Ответ

1 голос
/ 07 июня 2019

Похоже, вы ищете xarray.open_mfdataset

ds = xr.open_dataset('D:/pr_*.nc')

Ваш код особенно медленный, потому что вы постоянно звоните np.concatenate. Каждый раз, когда вы вызываете эту функцию, вы должны копировать все данные, которые вы загрузили до сих пор. Это квадратичная стоимость.

...