9

有没有比在循环中附加 0 和 1 更有效的方法在 Python 中生成 10 kBit(10,000 位)随机二进制序列?

4

3 回答 3

12

如果你想要一个随机二进制序列,那么在适当的范围内生成一个随机整数可能是最快的:

import random
s = random.randint(0, 2**10000 - 1)

在此之后,它真的取决于你想用你的二进制序列做什么。您可以使用按位运算查询各个位:

s & (1 << x)  # is bit x set?

或者,如果您想让检查、设置切片等更容易,您可以使用bitarraybitstring之类的库:

from bitstring import BitArray
b = BitArray(uint=s, length=10000)
p, = b.find('0b000000')
if b[99]:
    b[100] = False
...
于 2012-12-17T21:51:04.680 回答
5

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 个字符的字符串。

于 2012-12-22T19:17:21.743 回答
0

这是一个单行:

import random
[random.randrange(2) for _ in range(10000)]
于 2022-01-24T17:19:33.703 回答