Python中根据索引列表从bitarray中提取位?

问题描述 投票:0回答:1

我有两个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())
python list search indexing bitarray
1个回答
0
投票

自从提出这个问题以来,这可能是新功能,但您现在可以这样做:

In [26]: a = bitarray('10010110')
    ...: b = bitarray('01001110')

In [27]: a[b]
Out[27]: bitarray('0011')
© www.soinside.com 2019 - 2024. All rights reserved.