random.gauss 不应该返回介于平均值和标准偏差之间的值吗?



我尝试在Python中使用random.gauss函数来获得一个范围之间的随机值。高斯函数以平均值、标准差为参数。返回值不应该在[mean +- standard deviation]之间吗?

以下是代码片段:

for y in [random.gauss(4,1) for _ in range(50)]:
if y > 5 or y < 3: # shouldn't y be between  (3, 5) ?
print(y)

代码输出:

6.011096878888296
2.9192195126660403
5.020299287583643
2.9322959456674083
1.6704559841869528

"返回值不应该在[平均值+-标准偏差]之间吗?">

没有。对于高斯分布,略低于32%的结果将与任一方向的平均值相差一个以上的标准差。没有一个固定的范围包含100%的结果。

高斯分布只关注值偏离平均值一定量的概率。所以,任何值都是可能的,只是对于的某个值范围,概率非常低

50的样本量不足以使样本均值和样本SD成为总体均值/SD的良好估计量。拯救大数定律:

from random import gauss
xs = []
for i in range(100000):
xs.append(gauss(0,1))
print("mean = ", sum(xs)/len(xs)) # should print a number close to 0
in_sd = len(list(x for x in xs if x > -1 and x < 1))
print("in SD = ",  in_sd/len(xs)) # should print a number close to 0.68

(https://repl.it/@Millimouse/SiennaFlatBackground(


要获得3到5之间的随机数,请使用random.uniform(3, 5)

相关内容

最新更新