У меня есть два объекта 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())