Windowed пишет в Python, например, в NetCDF - PullRequest
1 голос
/ 08 апреля 2019

В Python, как я могу записать подмножества массива на диск, не сохраняя весь массив в памяти?

Документы ввода / вывода xarray отмечают, что xarray не поддерживает инкрементные записи, только инкрементные чтениякроме потоковой передачи через dask.array.(Кроме того, изменение набора данных влияет только на копию в памяти, а не на подключенный файл.) Документы dask предполагают, что может потребоваться сохранение всего массива после каждой манипуляции?

1 Ответ

0 голосов
/ 10 апреля 2019

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

Обратите внимание, что этот подход также предоставляет возможность постепенно увеличивать измерение массива (вызывая createDimension с размером None, делая его первым измерением переменной и итеративно присваивая постепенно увеличивающиеся индексы вдольэто измерение переменной).

Хотя записи окна произвольного доступа (т. е. подмножества), по-видимому, требуют пакета более низкого уровня, более систематические записи подмножества (в конечном итоге охватывающие весь массив) могут выполняться постепенно с помощью xarray(указав параметр размера куска для запуска использования dask.array бэкэнда) и при условии, что ваш алгоритм подвергается рефакторингу, так что основной цикл происходит в вызове dask / xarray store-to-file.Это означает, что вы не будете иметь явного контроля над последовательностью, в которой порции генерируются и записываются.

...