Python 是否有一个生成数据的速度与 os.urandom 一样快但可重现的库?
Does Python have a library that produces data as fast os.urandom but is reproducible?
是否有一个 Python 库可以像 os.urandom 一样快速生成随机数据,但如果给定种子就可以复制数据?
您可以使用 random.seed
生成可重现的序列。唯一的问题是让 Python 快速生成随机字节。您可以使用 a trick observed by @jfs with random.getrandbits
来减少 Python 必须做的处理量:
import random
def almost_urandom(n):
return random.getrandbits(8 * n).to_bytes(n, 'big')
random.seed
让您确定地生成字节:
In [26]: random.seed(0)
In [27]: almost_urandom(10)
Out[27]: b'\xc2\tb\x9fo\xbe\xd8,\x07\xcd'
In [28]: almost_urandom(10)
Out[28]: b'\n]k\xaa\x94U\xe3\xe7\x06\x82'
In [29]: random.seed(0)
In [30]: almost_urandom(10)
Out[30]: b'\xc2\tb\x9fo\xbe\xd8,\x07\xcd'
In [31]: almost_urandom(10)
Out[31]: b'\n]k\xaa\x94U\xe3\xe7\x06\x82'
对我来说,它的运行速度比 os.urandom()
快一个数量级,即使 n
以百万计也是如此。
是否有一个 Python 库可以像 os.urandom 一样快速生成随机数据,但如果给定种子就可以复制数据?
您可以使用 random.seed
生成可重现的序列。唯一的问题是让 Python 快速生成随机字节。您可以使用 a trick observed by @jfs with random.getrandbits
来减少 Python 必须做的处理量:
import random
def almost_urandom(n):
return random.getrandbits(8 * n).to_bytes(n, 'big')
random.seed
让您确定地生成字节:
In [26]: random.seed(0)
In [27]: almost_urandom(10)
Out[27]: b'\xc2\tb\x9fo\xbe\xd8,\x07\xcd'
In [28]: almost_urandom(10)
Out[28]: b'\n]k\xaa\x94U\xe3\xe7\x06\x82'
In [29]: random.seed(0)
In [30]: almost_urandom(10)
Out[30]: b'\xc2\tb\x9fo\xbe\xd8,\x07\xcd'
In [31]: almost_urandom(10)
Out[31]: b'\n]k\xaa\x94U\xe3\xe7\x06\x82'
对我来说,它的运行速度比 os.urandom()
快一个数量级,即使 n
以百万计也是如此。