Лучший способ хранить логические значения для экономии памяти в Python - PullRequest
1 голос
/ 12 июля 2011

Как лучше всего хранить от миллиона до 450 000 логических значений в словаре, подобном коллекции, индексируемой длинным числом? Мне нужно использовать как можно меньше памяти. True и Int занимают более 22 байтов на запись. Возможно ли более низкое значение памяти на логическое значение?

Ответы [ 3 ]

4 голосов
/ 12 июля 2011

Отметьте этот вопрос . Bitarray кажется предпочтительным выбором.

1 голос
/ 12 июля 2011

Два основных модуля для этого: bitarray и bitstring (я написал последний).Каждый будет делать то, что вам нужно, но некоторые плюсы и минусы для каждого из них:

bitarray

  • Написано как расширение C, поэтому очень быстро.
  • Только Python 2.

цепочка битов

  • Pure Python.
  • Python 2.6+ и Python 3.x
  • Более богатый массив методов для чтения иинтерпретация данных.

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

0 голосов
/ 02 июля 2018

Задумывались ли вы об использовании гибридного списка / цепочки битов?

Используйте свой список для хранения одного измерения ваших битов. Каждый элемент списка будет содержать цепочку битов фиксированной длины. Вы должны использовать свой список, чтобы сфокусировать поиск на интересующей цепочке, а затем использовать цепочку для поиска / изменения интересующей вас биты.

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

...