在Python中生成10 kBit(10,000位)随机二进制序列比在循环中追加0和1更有效吗?
答案 0 :(得分:11)
如果你想要一个随机的二进制序列,那么在适当的范围内产生一个随机整数可能是最快的:
import random
s = random.randint(0, 2**10000 - 1)
在此之后,它实际上取决于你想对二进制序列做什么。您可以使用按位运算查询各个位:
s & (1 << x) # is bit x set?
或者您可以使用bitarray或bitstring这样的库,如果您想进行检查,设置切片等更容易:
from bitstring import BitArray
b = BitArray(uint=s, length=10000)
p, = b.find('0b000000')
if b[99]:
b[100] = False
...
答案 1 :(得分:3)
numpy包有一个子包'随机',它可以生成随机数组。
http://docs.scipy.org/doc/numpy/reference/routines.random.html
如果你想要一个'n'个随机位数组,你可以使用
arr = numpy.random.randint(2, size=(n,))
...但是根据你使用它们的方式,使用它可能更有效。
arr = numpy.random.randint(0x10000, size=(n,))
获取'n'个数组,每个数字有16个随机位;然后
rstring = arr.astype(numpy.uint16).tostring()
将其转换为包含相同随机位的2 * n个字符串。