Альтернатива файлам npz?

Я использую массивы, хранящиеся в формате Python .npz. У меня есть много таких файлов, которые имеют одинаковую общую структуру: имя файла my_file_var1_var2_var3.npz содержит следующие элементы (все массивы представляют собой 32-битные числа с плавающей запятой):

  • двумерный массив (N=11, Ns=2000)
  • двумерный массив (12, N )
  • двумерный массив ( 300, N )
  • двумерный массив ( 300, Ns )
  • поплавок
  • целое число

Очень раздражает иметь более 1000 файлов, и каждый из них занимает около 4 МБ. Я подумал, что было бы неплохо переместить их в контейнер, такой как HDF5/Pytables или аналогичный. Различные массивы - это просто массивы, нет предпочтительного порядка или чего-то еще (они фактически являются матрицами или стеками векторов, с которыми будут работать). Все массивы для каждого имени файла требуются вместе одновременно.

Есть ли какие-либо рекомендации о том, в каких форматах лучше извлекать массивы, связанные с var1, var2 и var3, которые переносимы и эффективны при хранении?


person Jose    schedule 30.04.2015    source источник


Ответы (1)


Хранение вашего набора данных в формате HDF5 с помощью PyTables здесь определенно имеет смысл (см., например, этот -in-pytables">пример).

Он не только поместит все ваши данные в один и тот же контейнер, но вы также сможете получить сжатие, эффективные запросы и, возможно, более быстрый доступ для чтения/записи с помощью BLOSC.

Поскольку ваши элементы имеют переменную форму, вы не можете поместить все элементы одного типа в общий массив. Итак, у вас есть несколько вариантов,

  1. Сохраните каждый массив как отдельный узел HDF5.
  2. Если N является переменной, но имеет какое-то разумное максимальное значение N_max (скажем, 20 или 30), вы можете просто создать уникальные массивы размером (number_of_items, ..., Nmax) и заполнить ненужные элементы нулями по умолчанию. Удивительно, но это может быть более эффективным, если вам нужно запрашивать все элементы одновременно, и вы не увидите накладных расходов на размер, если используете сжатие.
person rth    schedule 30.04.2015