Эффективная сериализация numpy логических массивов

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

У нас есть два определения эффективности, которые нужно адресовать, здесь:

  1. Эффективность использования памяти; чем меньше, тем лучше
  2. Эффективность сериализации и восстановления массива в вычислительном времени; Меньше времени - лучше

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

Есть два свойства, которые Я надеюсь, что эта задача будет проще:

  1. Я могу гарантировать, что все массивы имеют одинаковый размер и форму
  2. Массивы являются логическими, что означает, что их можно просто представить как последовательность 1 s и 0 s, битовая последовательность

Есть ли эффективная структура данных Python (2.7 или, если возможно, 2.6), в которую я мог бы сериализовать их (возможно, какая-то структура байтов) , и не могли бы вы привести пример преобразования между массивом и этой структурой, а также из структуры обратно в исходный массив?

Обратите внимание, что нет необходимости хранить информацию о том, был ли каждый индекс True или Неверно ; структуры, которая просто хранит индексы, в которых массив был Истинно , будет достаточно для восстановления массива.

Достаточное решение будет работать для одномерного массива, но хорошее решение также будет работать для 2 -мерный массив, и отличное решение будет работать для массивов еще более высоких размерностей.

8
задан gotgenes 14 July 2011 в 17:49
поделиться