python - pyplot - random.seed(): ¿Qué hace?
subplot python title (9)
Estoy un poco confundido sobre lo que hace random.seed()
en Python. Por ejemplo, ¿por qué los ensayos a continuación hacen lo que hacen (consistentemente)?
>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7
No pude encontrar una buena documentación sobre esto. ¡Gracias por adelantado!
Aquí está mi entendimiento. Cada vez que establecemos un valor inicial, se genera una "etiqueta" o "referencia". La siguiente llamada aleatoria se adjunta a esta "etiqueta", por lo que la próxima vez que llame al mismo valor de inicialización y función aleatoria, obtendrá el mismo resultado.
np.random.seed( 3 )
print(np.random.randn()) # output: 1.7886284734303186
np.random.seed( 3 )
print(np.random.rand()) # different function. output: 0.5507979025745755
np.random.seed( 5 )
print(np.random.rand()) # different seed value. output: 0.22199317108973948
Aquí hay una pequeña prueba que demuestra que alimentar el método seed()
con el mismo argumento causará el mismo resultado pseudoaleatorio:
# testing random.seed()
import random
def equalityCheck(l):
state=None
x=l[0]
for i in l:
if i!=x:
state=False
break
else:
state=True
return state
l=[]
for i in range(1000):
random.seed(10)
l.append(random.random())
print "All elements in l are equal?",equalityCheck(l)
En este caso, el azar es realmente pseudoaleatorio. Dada una semilla, generará números con una distribución igual. Pero con la misma semilla, generará la misma secuencia de números cada vez. Si quieres que cambie, tendrás que cambiar tu semilla. A mucha gente le gusta generar una semilla basada en la hora actual o algo así.
Imho, se usa para generar el mismo resultado aleatorio cuando usas random.seed(samedigit)
nuevamente.
In [47]: random.randint(7,10)
Out[47]: 9
In [48]: random.randint(7,10)
Out[48]: 9
In [49]: random.randint(7,10)
Out[49]: 7
In [50]: random.randint(7,10)
Out[50]: 10
In [51]: random.seed(5)
In [52]: random.randint(7,10)
Out[52]: 9
In [53]: random.seed(5)
In [54]: random.randint(7,10)
Out[54]: 9
Los generadores de números pseudoaleatorios funcionan al realizar alguna operación en un valor. En general, este valor es el número anterior generado por el generador. Sin embargo, la primera vez que usa el generador, no hay un valor previo.
Sembrar un generador de números pseudoaleatorios le da su primer valor "anterior". Cada valor inicial corresponde a una secuencia de valores generados para un generador de números aleatorios dado. Es decir, si proporciona la misma semilla dos veces, obtiene la misma secuencia de números dos veces.
En general, desea sembrar su generador de números aleatorios con algún valor que cambie cada ejecución del programa. Por ejemplo, la hora actual es una semilla de uso frecuente. La razón por la que esto no ocurre automáticamente es que, si lo desea, puede proporcionar una semilla específica para obtener una secuencia conocida de números.
Todas las otras respuestas no parecen explicar el uso de random.seed (). Aquí hay un ejemplo simple ( source ):
import random
random.seed( 3 )
print "Random number with seed 3 : ", random.random() #will generate a random number
#if you want to use the same random number once again in your program
random.seed( 3 )
random.random() # same random number as before
#Simple python programme to understand random.seed() importance
import random
random.seed(10)
for i in range(5):
print(random.randint(1,100))
Ejecute el programa anterior varias veces ....
Primer intento: imprime 5 enteros aleatorios en el rango de 1 a 100
Segundo intento: imprime los mismos 5 números aleatorios que aparecieron en la ejecución anterior.
Tercer intento: mismo
.....Pronto
Explicación: Cada vez que estamos ejecutando el programa anterior, estamos estableciendo seed en 10, luego el generador aleatorio toma esto como una variable de referencia. Y luego, al hacer una fórmula predefinida, genera un número aleatorio.
Por lo tanto, establecer semilla en 10 en la próxima ejecución nuevamente establece el número de referencia en 10 y nuevamente se inicia el mismo comportamiento ....
Tan pronto como reseteamos el valor de la semilla, le damos las mismas plantas.
Nota: Cambie el valor inicial y ejecute el programa, verá una secuencia aleatoria diferente a la anterior.
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.seed(9002)
>>> random.randint(1, 10)
3
Intenta esto. Digamos que ''random.seed'' da un valor al generador de valores aleatorios (''random.randint ()'') que genera estos valores sobre la base de esta semilla. Una de las propiedades esenciales de los números aleatorios es que deben ser reproducibles. Una vez que colocas la misma semilla obtienes el mismo patrón de números aleatorios. Entonces los estás generando desde el principio otra vez. Da una semilla diferente, comienza con una inicial diferente (por encima de 3).
Has dado una semilla ahora generará números aleatorios entre 1 y 10 uno tras otro. Entonces puedes asumir un conjunto de números para un valor inicial.
Seed() can be used for later use ---
Example:
>>> import numpy as np
>>> np.random.seed(12)
>>> np.random.rand(4)
array([0.15416284, 0.7400497 , 0.26331502, 0.53373939])
>>>
>>>
>>> np.random.seed(10)
>>> np.random.rand(4)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
>>>
>>>
>>> np.random.seed(12) # When you use same seed as before you will get same random output as before
>>> np.random.rand(4)
array([0.15416284, 0.7400497 , 0.26331502, 0.53373939])
>>>
>>>
>>> np.random.seed(10)
>>> np.random.rand(4)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
>>>