在Python中生成10 kBit(10,000位)随机二进制序列是否有比在循环中附加0和1更有效的方法?
如果你想要一个随机的二进制序列,那么在适当的范围内生成一个随机整数可能是最快的:
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
...
numpy 包有一个子包"random",可以生成随机数数组。
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 个字符的字符串。
这是一个行:
import random
[random.randrange(2) for _ in range(10000)]