Доступ к одному куску в Зарре
Zarr сохраняет массив на диске в виде фрагментов, каждый фрагмент представляет собой отдельный файл. Есть ли способ получить доступ только к одному выбранному чанку (файлу)?
Можно ли определить, какие чанки пусты без загрузки всего массива в память?
3 ответа
Я не думаю, что существует общее решение, позволяющее узнать, какие фрагменты инициализируются для любого типа хранилища, но для DirectoryStore можно перечислить файловую систему, чтобы узнать, какие фрагменты инициализированы. Вот как zarr вычисляет свойство nchunks_initialized .
Я полагаю, вы могли бы черпать вдохновение оттуда, чтобы перечислить все инициализированные фрагменты, а затем вычислить, какой фрагмент массива им соответствует.
Хотя в zarr нет объекта для чанка, вы можете вычислить их начало и конец по каждой оси из размеров массива и размеров чанка. Если вы хотите загружать фрагменты один за другим из соображений эффективности, вы можете вычислить их индексы и разрезать массив zarr, чтобы получить массив numpy в качестве рабочей области.
Поскольку у меня были похожие потребности, я создал некоторые функции в качестве помощников именно для этого. вдохновение.
Можно увидеть, какие куски заполнены, посмотрев на keys
метод базового chunk_store
, Будут заполнены только ключи с данными.
Соответствующие значения этих ключей будут содержать данные этого блока, но они будут сжаты. Если вы хотите больше, побудите вас поднять вопрос в репо Zarr.
Я не знаю ни одного способа найти размер куска, кроме как поразить FS самостоятельно. Зарр тезисы по этому поводу. Может быть, вам придется объяснить, что вы делаете.
Проект, над которым я сейчас работаю, использует Zarr для хранения метеорологических данных. Мы храним данные в трехмерном массиве формы (t, x, y)
, Наряду с данными, у нас есть массив формы (t)
, по сути, битовая маска для записи, какие слоты заполнены. Поэтому, когда данные поступают, мы пишем
data[t] = [...]
ready[t] = 1
Поэтому при запросе данных мы знаем, в какие временные интервалы следует ожидать данные, а какие - пустые.