如何在Python中生成接近真实均值和标准差的统一随机数?[关闭]

How to generate uniform random numbers in Python close to the true mean and standard deviation? [closed]

提问人:OmG 提问时间:9/26/2023 最后编辑:OmG 更新时间:9/27/2023 访问量:81

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

上个月关闭。

我正在尝试尽可能生成接近其理论定义的统一随机数,尤其是在 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 之间的混淆,如下所述!

Python 数学 随机 概率

评论

0赞 President James K. Polk 9/26/2023
我认为您可能会混淆标准差和方差。你所提出的不能再准确地称为“均匀”分布。你所观察到的不是使用伪随机分布的影,你会使用具有均匀分布的真随机数生成器观察到同样的事情,除非你以某种方式在 python 的 MT 中发现了一个缺陷
0赞 OmG 9/27/2023
@PresidentJamesK.Polk,感谢您的评论。不幸的是,我没有从中得到答案。那么,如何修改代码以达到更接近的统一随机数(平均值为 1/2,标准值为 1/12)?你能解释一下你的想法吗?

答:

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
啊,你是对的。我对方差和标准感到困惑!