如何在Python中生成接近真实均值和标准差的均匀随机数?

问题描述 投票:0回答:1

我正在尝试生成尽可能接近其理论定义的均匀随机数,尤其是在 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 的核心实现。但是,我正在寻找其他方法来解决这个问题。

python math random probability
1个回答
1
投票

我认为你混淆了标准差和方差。
对于均匀分布 平均值为 (a+b) / 2,方差(即 std^2 )为 (b-a)^2/12。
所以标准差就变成了 (b-a)^2/12 的平方根,简单来说就是 (b-a)/sqrt(12)

>>> 1/sqrt(12)
0.2886751345948129

非常接近您的标准差。

来源

© www.soinside.com 2019 - 2024. All rights reserved.