эффективно сжимать массивы numpy смешанного типа - PullRequest
6 голосов
/ 29 марта 2019

Мне нужен способ для эффективного хранения (размер и скорость чтения) данных с использованием бесчисленных массивов со смешанными (разнородными) типами.Представьте себе набор данных, который имеет 100M наблюдений и 5 переменных на наблюдение (3 из которых int32, а 2 - float32).

В настоящее время я храню данные в двух сжатых файлах .npy, один для целых чисел.и один для чисел с плавающей точкой:

import numpy as np
import gzip as gz

with gz.open('array_ints.npy.gz', 'wb') as fObj:
    np.save(fObj, int_ndarray)

with gz.open('array_floats.npy.gz', 'wb') as fObj:
    np.save(fObj, flt_ndarray)

Я также пытался сохранить данные в виде структурированного массива, но окончательный размер файла примерно на 25% больше, чем объединенный размер хранения целых чисел и чисел с плавающей запятой отдельно.Мои данные простираются до диапазона ТБ, поэтому я ищу наиболее эффективный способ их хранения (но я бы хотел избежать изменения алгоритмов сжатия на что-то вроде LZMA).

Есть ли другой способ отличатьсятипы данных эффективно хранятся вместе, так что я могу читать в обоих одновременно?Я начинаю изучать HD5, но я не уверен, что это может помочь.

РЕДАКТИРОВАТЬ:
В конечном итоге, я пошел по маршруту HD5 с h5py.Относительно сжатых gzip массивов .npy, я на самом деле вижу уменьшение размера на 25% при использовании h5py.Однако это можно отнести к фильтру в случайном порядке.Но при сохранении двух массивов в одном файле практически нет накладных расходов по сравнению с сохранением отдельных файлов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...