为什么结果总是在2.87左右

Ro *_* Ma 1 python random math numpy

我有下面的代码

result=0
loop_n=10000
for i in range(loop_n):
    result+=np.random.rand(3,4,10).std()
result=result/loop_n
print(result)
Run Code Online (Sandbox Code Playgroud)

据我了解,如果我多次跑步,结果应该会有所不同,因为结果来自随机,但实际上结果始终在0.287左右

这背后有一些理论吗?

Ser*_*sta 6

这只是一个np.random.rand很好的统一随机发生器的证明。您有10000条观测值的分布标准偏差遵循相同的定律。标准偏差是方差的平方根,所以一个统一的理论(概率)标准偏差是(max - min) / sqrt(12)。您的样本量相当大,因此观察到的估计量将接近理论标准偏差,即1/sqrt(12)约0.28867513459481287。但这现在成为一个数学问题:-)


假设[0,1]上的分布均匀,则概率(理论)平均值E(X)是段[0-1]上x的积分,为0.5。根据定义,方差为E((XE(X))2),可以将其计算为段[-0.5,0.5]上x 2的积分,其平方根给出上面写出的结果。