为什么一百万个随机数的平均值不在范围的中间?
所以我正在编写一个random.randint()在 python中使用的脚本,但这并不重要,因为我认为大多数主流语言都有这个“问题”。是这样的:我设置i为一个随机数,然后将一个随机数相加100万次,然后将其除以2。输出变化很大,有时接近 0,有时接近 1,但从逻辑上讲,输出应该几乎是0.5. 是什么导致了这种变化。
from random import randint
i = randint(0, 1)
for x in range(1000000):
i = (i + randint(0, 1)) / 2
print(i)
回答
您的方法不是计算所有百万数字的平均值。它只是重复计算一个聚合,其中每一步都是前一个值和一个新数字的平均值。这将使得添加到系列中的每个新值都会对结果“平均”值产生不成比例的大影响,这与每个值对结果产生同等影响的真实平均值相反。
要明白我的意思,请考虑以下代码:
from random import randint
nums = [randint(0, 1) for x in range(0, 1000)]
avg = 0
for i in nums:
avg += i
avg /= len(nums)
pseudo_avg = 0
for i in nums:
pseudo_avg = (pseudo_avg + i) / 2
print('True Average: %s' % avg)
print('Pseudo-average: %s' % pseudo_avg)
在一次运行中,我得到以下结果:
True Average: 0.492
Pseudo-average: 0.979068653199454