Estoy un poco confundido sobre lo que random.seed()
hace en Python. Por ejemplo, ¿por qué los siguientes ensayos 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 buena documentación sobre esto.
python
random
random-seed
Ahaan S. Rungta
fuente
fuente
random.seed
. Por lo general, solo invocarandom.seed()
, y utiliza la hora actual como valor inicial, lo que significa que cada vez que ejecute el script obtendrá una secuencia de valores diferente.Respuestas:
Los generadores de números pseudoaleatorios funcionan realizando alguna operación en un valor. Generalmente este valor es el número anterior generado por el generador. Sin embargo, la primera vez que usa el generador, no hay ningún valor anterior.
Sembrar un generador de números pseudoaleatorios le da su primer valor "anterior". Cada valor inicial corresponderá a una secuencia de valores generados para un generador de números aleatorios dado. Es decir, si proporciona la misma semilla dos veces, obtendrá 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 cual esto no sucede automáticamente es para que, si lo desea, pueda proporcionar una semilla específica para obtener una secuencia de números conocida.
fuente
Todas las otras respuestas no parecen explicar el uso de random.seed (). Aquí hay un ejemplo simple ( fuente ):
fuente
Intenta esto.
Digamos que 'random.seed' le da un valor al generador de valores aleatorios ('random.randint ()') que genera estos valores sobre la base de esta semilla. Una de las propiedades imprescindibles de los números aleatorios es que deben ser reproducibles. Cuando pones la misma semilla, obtienes el mismo patrón de números aleatorios. De esta manera, los está generando desde el principio. Usted da una semilla diferente, comienza con una inicial diferente (arriba de 3).
Dada una semilla, generará números aleatorios entre 1 y 10 uno tras otro. Entonces asumes un conjunto de números para un valor semilla.
fuente
Un número aleatorio es generado por alguna operación en el valor anterior.
Si no hay un valor anterior, entonces la hora actual como valor anterior automáticamente. Podemos proporcionar este valor anterior por cuenta propia usando
random.seed(x)
dondex
podría haber cualquier número o cadena, etc.Por
random.random()
lo tanto, no es un número aleatorio perfecto, se podría predecir a través derandom.seed(x)
.Por lo tanto, generar un número aleatorio no es realmente aleatorio, porque se ejecuta en algoritmos. Los algoritmos siempre dan la misma salida basada en la misma entrada. Esto significa que depende del valor de la semilla. Entonces, para hacerlo más aleatorio, el tiempo se asigna automáticamente
seed()
.fuente
fuente
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.
3er intento: igual
.....Pronto
Explicación: Cada vez que ejecutamos el programa anterior, establecemos la semilla 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 comienza el mismo comportamiento ...
Tan pronto como restablecemos el valor de la semilla, da las mismas plantas.
Nota: Cambie el valor inicial y ejecute el programa, verá una secuencia aleatoria diferente a la anterior.
fuente
En este caso, random es en realidad seudoaleatorio. 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í.
fuente
En mi humilde opinión, se usa para generar el mismo resultado de curso aleatorio cuando se usa
random.seed(samedigit)
nuevamente.fuente
Establezca
seed(x)
antes de generar un conjunto de números aleatorios y use la misma semilla para generar el mismo conjunto de números aleatorios. Útil en caso de reproducir los temas.fuente
Aquí está mi entendimiento. Cada vez que establecemos un valor semilla, se genera una "etiqueta" o "referencia". La siguiente llamada random.function se adjunta a esta "etiqueta", por lo que la próxima vez que llame al mismo valor de inicialización y random.function, obtendrá el mismo resultado.
fuente
Aquí hay una pequeña prueba que demuestra que alimentar el
seed()
método con el mismo argumento causará el mismo resultado pseudoaleatorio:fuente
len(set(l))<=1
random.seed(a, version)
en python se usa para inicializar el generador de números pseudoaleatorios (PRNG) .PRNG es un algoritmo que genera una secuencia de números que se aproxima a las propiedades de los números aleatorios. Estos números aleatorios se pueden reproducir utilizando el valor de semilla . Entonces, si proporciona un valor de inicialización, PRNG comienza desde un estado inicial arbitrario utilizando una inicialización.
El argumento
a
es el valor semilla. Si el valor a esNone
, por defecto, se usa la hora actual del sistema.y
version
es un entero que especifica cómo convertir un parámetro en un entero. El valor predeterminado es 2.Si desea que se reproduzca el mismo número aleatorio, proporcione nuevamente la misma semilla
Si no proporciona la semilla, genera un número diferente y no 1 como antes
Si proporciona una semilla diferente a la anterior , le dará un número aleatorio diferente
Entonces, en resumen, si desea que se reproduzca el mismo número aleatorio, proporcione la semilla. Específicamente, la misma semilla .
fuente