繁体   English   中英

如何在高斯分布的两个值之间产生随机数

[英]How would I produce random numbers between two values with a Gaussian distribution

对Python来说是非常新的知识,需要在书中进行一些练习。 我需要产生200到600之间的800个随机数,并具有高斯分布。 我已经做到了:

x = pylab.zeros(800,float)
for x in range (0,800):
    y = random.gauss(550,30)

但是,只要全部800个都符合高斯分布,这将不会产生任何数字吗? 我需要200到600之间的值。

高斯分布不受限制,但您可以使其不太可能超出范围。 例如,您可以对平均值为400且标准偏差为200/3的样本进行采样,这意味着超出范围[200,600]将超出3个标准偏差。

mean = 400
stdev = 200/3   # 99.73% chance the sample will fall in your desired range

values = [random.gauss(mean, stdev) for _ in range(800)]

如果您想要有界的伪高斯分布,则可以执行以下操作

values = []
while len(values) < 800:
    sample = random.gauss(mean, stdev)
    if sample >= 200 and sample < 600:
        values.append(sample)

因此,如果您对超出期望范围的值进行采样,则将其丢弃并重新采样。

我认为最好的方法是生成高斯分布,然后重新缩放所有值,以使max=600min=200

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM