【发布时间】:2015-02-06 12:37:43
【问题描述】:
假设如下:
bitstring = numpy.random.random_integers(0,2**32,size=8).astype(numpy.uint32)
如何找出 256 位中的哪一个被设置为 1?我有这个……但这太疯狂了,不是吗?
maximum = (2**32)-1
for checkbit in range (256):
yes = bool(numpy.bitwise_and((2**checkbit)%maximum, bitstring[ ( (checkbit // maximum) + checkbit % maximum ) // 32 ] ) )
print 'bit', checkbit, 'set to', yes, 'in string', ( (checkbit // maximum) + checkbit % maximum ) // 32
我相信答案可能非常简单,但谷歌根本没有帮助,this related question is referring only to bytes。
由于我需要执行此操作数十亿次,我想知道是否有一种 Python 方法可以让它尽可能快地工作。
【问题讨论】:
-
"256 位中的哪一个设置为 1" 您使用的数字最多为 2**32,即 32 位。当您谈到 256 位时,我的印象更多的是您的意思是 8 位数字,最高可达 256(无符号)。你是什么意思?
-
第一行代码......它是一个双字符串,它是一个具有 8 个位置的 uint32 数组......因此我的 256 位。
-
啊,现在明白了。感谢您的澄清。
标签: python numpy bit-manipulation bit bitstring