我有两个bitarray对象(注意bitarray!= BitArray),看起来像
a = bitarray('10010110')
b = bitarray('01001110')
我想要一个新的位数组“c”,其中包含 a 的元素,其中 b 的元素等于 1。所以
>> c = 0011
我知道这样做
b.search(bitarray('1'))
返回我感兴趣的索引列表,但我找不到将位数组a与索引列表组合的方法。
我知道一个解决方案是将a转换为列表,使用np.take根据索引列表提取列表并将结果转换为bitarray。然而,这个解决方案要求太高(内存和计算)。我的完整代码理解了此操作的一种迭代,并且使用 1e6 数组进行的测试花费了大约 10 秒,这太多了。我应该使用很长的数组(5e9),这就是我选择位数组库的原因。据我了解,这个库在内存优化方面是最合适的。
这是我的“列表”解决方案
indexList=b.search(bitarray('1'))
c=bitarray((np.take(a.tolist(),indexList)).tolist())
自从提出这个问题以来,这可能是新功能,但您现在可以这样做:
In [26]: a = bitarray('10010110')
...: b = bitarray('01001110')
In [27]: a[b]
Out[27]: bitarray('0011')