我很新手Python,在一本书中做了一些练习。我需要产生800个介于200到600之间,带有高斯分布的随机数。我已经做到了这一步:
x = pylab.zeros(800,float)
for x in range (0,800):
y = random.gauss(550,30)
然而,只要这800个数都符合高斯分布,那么它们不会产生任何数量。我需要它们在200到600的范围内。
我很新手Python,在一本书中做了一些练习。我需要产生800个介于200到600之间,带有高斯分布的随机数。我已经做到了这一步:
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=600
和min=200
。