对 Python 非常陌生,在书中做了一些练习。我需要生成 200 到 600 之间的 800 个随机数,具有高斯分布。我已经走了这么远:
x = pylab.zeros(800,float)
for x in range (0,800):
y = random.gauss(550,30)
Run Code Online (Sandbox Code Playgroud)
但是,只要所有 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)]
Run Code Online (Sandbox Code Playgroud)
如果你想有一个有界的伪高斯分布,你可以做这样的事情
values = []
while len(values) < 800:
sample = random.gauss(mean, stdev)
if sample >= 200 and sample < 600:
values.append(sample)
Run Code Online (Sandbox Code Playgroud)
因此,如果您对超出所需范围的值进行采样,则将其丢弃并重新采样。
| 归档时间: |
|
| 查看次数: |
4207 次 |
| 最近记录: |