提问人:OmG 提问时间:9/26/2023 最后编辑:OmG 更新时间:9/27/2023 访问量:81
如何在Python中生成接近真实均值和标准差的统一随机数?[关闭]
How to generate uniform random numbers in Python close to the true mean and standard deviation? [closed]
问:
我正在尝试尽可能生成接近其理论定义的统一随机数,尤其是在 Python 中。(也就是说,我熟悉编程语言中 Pesudo 随机生成器 (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)。
正如我们观察到的,生成的随机数的 std 大于 1/4(是理论的 3 倍)。
因此,一个合理的问题是“我应该如何调整这种实现以使更接近理论的 std?
我知道这种差异背后的基本原理源于该函数中使用的 PRG 的核心实现。但是,我正在寻找任何其他方法来解决这个问题。random
更新:
这只是方差和 std 之间的混淆,如下所述!
答:
2赞
Naitzirch
9/26/2023
#1
我认为你混淆了标准差和方差。
实现均匀分布
均值为 (a+b) / 2,方差 (std^2) 为 (b-a)^2/12。
所以标准差变成 (b-a)^2/12 的平方根,简称为 (b-a)/sqrt(12)
>>> 1/sqrt(12)
0.2886751345948129
非常接近您的标准偏差。
评论
0赞
OmG
9/27/2023
啊,你是对的。我对方差和标准感到困惑!
评论