我正在尝试生成尽可能接近其理论定义的均匀随机数,尤其是在 Python 中。 (即,我熟悉编程语言中的伪随机生成器(PRG)的概念。)
我正在使用以下代码来解决这个问题(一个众所周知的解决方案):
import random
import numpy as np
rands = []
rng = random.Random(5)
for i in range(10000):
rands.append(rng.uniform(0,1))
print(f"mean: {np.mean(rands)}")
print(f"std: {np.std(rands)}")
结果是:
mean: 0.501672056714862
std: 0.2880418652775188
通过更改初始种子,我们可以观察到我们将获得大致相同的值。
另一方面,从理论方面来说,我们知道[0, 1]之间的均匀随机变量的均值和标准差(std)等于0.5和1/12(~ 0.08333),分别。
我们可以观察到,生成的随机数的标准差超过 1/4(是理论值的 3 倍)。
因此,一个似乎合理的问题是“我应该如何调整此实现以使其更接近理论标准?”
据我了解,这种差异背后的基本原理源于
random
函数中使用的 PRG 的核心实现。但是,我正在寻找其他方法来解决这个问题。
我认为你混淆了标准差和方差。
对于均匀分布
平均值为 (a+b) / 2,方差(即 std^2 )为 (b-a)^2/12。
所以标准差就变成了 (b-a)^2/12 的平方根,简单来说就是 (b-a)/sqrt(12)
>>> 1/sqrt(12)
0.2886751345948129
非常接近您的标准差。