问题描述
我开发了一个生成测试数据系列的简单应用程序,并且我使用随机种子构建它以便能够重复。 我注意到以下内容并想知道为什么会发生这种情况:
>>> random.seed(1)
>>> [random.randint(0,10) for _ in range(0,10)]
[2, 9, 1, 4, 1, 7, 7, 7, 10, 6]
>>> random.seed(1)
>>> random.random()
0.13436424411240122
>>> [random.randint(0,10) for _ in range(0,10)]
[1, 4, 1, 7, 7, 7, 10, 6, 3, 1]
注意对random()的单个调用如何使用randint()的两个值。 我猜这与在给定范围内生成浮点数与int值所需的随机信息量有关,但是有没有办法跟踪到目前为止使用了多少随机值? ,即系统的半随机值序列有多远?
我最终编写了自己的函数,总是在其逻辑中使用random.random()。 所以我不是要求解决方案,只是一些背景/解释。
1楼
您的猜测是准确的,至少对于最新版本的CPython。 随机模块的代码中有几个相关的位置,您可以在其中看到为什么会发生这种情况。 我会考虑所有这些实现细节,但是你可以看到,基本上,根据需要生成32个随机位的组以获得随机数。 因此,获得53个随机位(表示双精度的小数部分)使用的随机位数是获得4个随机位的两倍。
关于能够分辨出已经生成了多少随机数据,所提供的功能似乎并没有为您提供简单可靠的方法。