читать подмножество одного файла NetCDF, используя кусочки измерений - PullRequest
0 голосов
/ 25 апреля 2018

У меня очень большой файл NetCDF.

Я попытался использовать функцию dask.array в модуле python xarray и указал размер чанка при открытии этих данных.Все работало нормально;однако, когда я пытался загрузить переменные в память, используя .load (), это было очень медленно.

Интересно, есть ли какая-либо опция (в xarray или другом модуле Python) для чтения в подмножествеNetCDF файл с указанием индексов размеров (широта, долгота)?Таким образом, я могу напрямую применять функции к файлу подмножества, не используя dask.array.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Эта проблема звучит аналогично тем, которые обсуждались в https://github.com/pydata/xarray/issues/1396,, но если вы используете последние версии dask, эта проблема должна быть решена.

Вы можете потенциально повысить производительность, избегая явного разбиения на фрагменты до тех пор, пока не будет проиндексировано *1006*, например, просто

tmax = xr.open_mfdataset(terra_climate_dir+'tmax.nc')
tmax_pos = tmax.sel(lat=39.9042,lon=116.4074,method='nearest').compute()

Если это не поможет, то проблема может быть связана с вашими исходными данными. Например, запросы могут быть медленными, если доступ к данным осуществляется через подключенный к сети диск, или если данные загружаются в файлы netCDF4 с использованием фрагментирования / сжатия внутри файла (что требует считывания полных фрагментов в память).

0 голосов
/ 25 апреля 2018

Вы можете нарезать данные перед загрузкой переменной в память.

ds = xr.open_dataset('path/to/file')
in_memory = ds.isel(x=slice(10, 1000)).load()
...