Извлечь бит из битового массива согласно списку индексов в Python? - PullRequest
1 голос
/ 06 мая 2020

У меня есть два объекта bitarray (NB bitarray! = BitArray), которые выглядят как

a = bitarray('10010110')
b = bitarray('01001110')

Мне нужен новый битовый массив «c», содержащий элементы индексы, где элементы b равны 1. Так что

>> c = 0011

я знаю, что выполнение

b.search(bitarray('1')) 

возвращает список индексов, которые меня интересуют, но я не могу найти способ объедините битовый массив a со списком индексов.

Я знаю, что решение состоит в том, чтобы преобразовать a в список, используйте np.take для извлечения списка в соответствии с список индексов и преобразовать результат в битовый массив. Тем не менее, это решение требует слишком больших затрат (памяти и вычислений). Мой полный код охватывает своего рода итерацию этой операции, и тест с массивом 1e6 занял около 10 секунд, что слишком много. Я должен работать с очень длинным массивом (5e9), поэтому я выбрал библиотеку bitarray. Насколько я понял, эта библиотека является наиболее подходящей с точки зрения оптимизации памяти.

Вот это мое "списковое" решение

indexList=b.search(bitarray('1'))
c=bitarray((np.take(a.tolist(),indexList)).tolist())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...