Si desea una distribución normal verdaderamente aleatoria, no puede garantizar la extensión de los números. Se puede reducir la probabilidad de los valores atípicos, sin embargo, mediante la especificación de la desviación estándar
>>> n = 3000000
>>> sigma5 = 1.0/1744278
>>> n * sigma5
1.7199093263803131 # Expect one values in 3 mil outside range at 5 stdev.
>>> sigma6 = 1.0/1/506800000
>>> sigma6 = 1.0/506800000
>>> n * sigma6
0.0059194948697711127 # Expect 0.005 values in 3 mil outside range at 6 stdev.
>>> sigma7 = 1.0/390600000000
>>> n * sigma7
7.6804915514592934e-06
Por lo tanto, en este caso, asegurando que la desviación estándar es solamente 1/6 o 1/7 de la mitad del rango le dará razonable Confianza en que sus datos no excederán el rango.
>>> range = 60000 - 100
>>> spread = (range/2)/6 # Anything outside of the range will be six std. dev. from the mean
>>> mean = (60000 + 100)/2
>>> a = numpy.random.normal(loc = mean, scale = spread, size = n)
>>> min(a)
6320.0238199673404
>>> max(a)
55044.015566089176
Por supuesto, todavía se puede realizar un valores que caen fuera del rango aquí
Si necesita enteros - verificar el caso extremo: es posible que tenga un 50% golpes cortados debido al redondeo! Simplemente genere 10000 números y cuente las ocurrencias de cada uno: deben ser más o menos iguales. Aquí hay un ejemplo de la superación del caso de borde con distribución 'uniforme' en 0..100:' round (random.uniform (-0.5, 100 + 0.5)) ' – kolypto