Método de semilla aleatoria para inicializar el PRNG en Python

Este tutorial lo guía sobre el uso del método seed () del módulo aleatorio. Sabría cómo llamar a la función seed () para inicializar el generador de números pseudoaleatorios (PRNG) en Python.

PRNG significa que puede generar un número que parece ser aleatorio y también utilizable por muchas aplicaciones. Pero en realidad, no son más que una secuencia de valores aleatorios pero predecibles.

También indica que no debe aplicarlos a las aplicaciones que involucran el cifrado y realizar operaciones de cifrado. En Python hay formas de generar generadores aleatorios seguros, verifique la publicación a continuación.

Debe leer – Generar números aleatorios en Python

Seed () para inicializar el generador y repetir el mismo número

En este tutorial , nuestro enfoque está en el método seed () del módulo aleatorio de Python. ¿Cómo se puede usar para inicializar un generador de números aleatorios? Y capaz de producir el número aleatorio similar exacto.

Cómo llamar a la función random.seed ()

Hemos resumido algunas de las notas clave antes de continuar con el uso del módulo aleatorio y el método de inicialización.

Python genera números pseudoaleatorios que no son completamente aleatorios, sino que son de naturaleza determinista. Su fuente es algún valor inicial alimentado al proceso. Lo llamamos un valor semilla. Por lo tanto, la salida del módulo aleatorio de Python deriva de los datos de semilla.

La palabra "determinista" significa que es posible predeterminar un valor.

Por lo general, los programadores toman la primera salida del generador como la valor semilla Por cierto, cuando comienzas a invocar el generador, no tiene ningún dato anterior. En este caso, el tiempo del sistema actúa como el inicializador.

Al personalizar el valor inicial, podemos configurar el generador de números pseudoaleatorios (PRNG) según nuestro requisito. Ahora, veamos qué hacer para usar el método random.seed ().

random.seed () signature

La función seed puede tomar dos argumentos opcionales.

 random.seed (value = None, version = 2) 
  • El primer argumento representa los datos semilla que son por defecto Ninguno. Significa que el tiempo del sistema funciona como la semilla. Si es un valor entero válido, entonces se usa tal como está.
  • El segundo argumento es la versión y tiene dos como valor predeterminado. Especifica que cualquier cadena, bytes o matriz y todo lo que se convierta en un número (int).

Cosas que debe saber sobre el valor de semilla

El Módulo Aleatorio considera el valor de semilla como una base para producir un número aleatorio. Si los datos de inicialización no están disponibles, entonces usa la hora del sistema.

Si no llamó al método de inicialización aleatorio (), entonces, cada vez que llama al generador, establece la hora actual del sistema como los datos iniciales. 19659002] Es la razón principal por la que las llamadas subsiguientes a random.random () siempre devuelven un número diferente.

El valor semilla juega un papel crítico al generar números aleatorios criptográficamente seguros.

Codifique para generar el mismo valor aleatorio usando seed ()

Este ejemplo le da una idea para utilizar la función seed () para producir datos aleatorios deterministas. Si desea crear el mismo valor en cada llamada a un generador, entonces mantenga el valor de semilla igual antes de usar un método de módulo.

El siguiente ejemplo lo hará más claro para usted.

 de importación aleatoria *

def main ():
    # si te gusta regenerar un valor aleatorio,
    # entonces mantenga los mismos datos de semilla para cada operación
    myseed = 10
    print ("Datos de semilla para el generador: {}". formato (myseed))

    # Ver el valor semilla fijo
    semilla (myseed)

    # Genera nuestro primer número al azar
    imprimir ("# 1 - {}". formato (randint (1, 20)))

    # Mantener el valor de la semilla constante
    semilla (myseed)

    # Generar el segundo número aleatorio
    imprimir ("# 2 - {}". formato (randint (1, 20)))

    # No cambies el valor semilla
    semilla (myseed)

    # Generar el tercer número aleatorio
    imprimir ("# 3 - {}". formato (randint (1, 20)))

principal()

Salida

 Datos de semilla para generador: 10
# 1 - 19
# 2 - 19
# 3 - 19 

Del resumen se desprende claramente que el resultado de cada llamada del generador es el mismo número. No es de extrañar, es porque mantuvimos el valor de inicialización constante para cada llamada a random.randint ().

Nota : Si pierde la llamada de inicialización antes de llamar a randint (), obtendrá el salida diferente.

También significa que si desea una salida distinta, establezca diferentes valores iniciales antes de llamar a un método de módulo aleatorio.

Consulte este ejemplo.

 de importación aleatoria *

def main ():
    # si te gusta regenerar un valor aleatorio,
    # entonces mantenga los mismos datos de semilla para cada operación
    myseed = 10
    print ("Datos de semilla para el generador: {}". formato (myseed))

    # Ver el valor semilla fijo
    semilla (myseed)

    # Genera nuestro primer número al azar
    imprimir ("# 1 - {}". formato (randint (1, 20)))

    # Llamada semilla perdida en el medio
    # semilla (myseed)

    # Generar el segundo número aleatorio
    imprimir ("# 2 - {}". formato (randint (1, 20)))

    # No cambies el valor semilla
    semilla (myseed)

    # Generar el tercer número aleatorio
    imprimir ("# 3 - {}". formato (randint (1, 20)))

principal()

Salida

 Datos de semilla para generador: 10
# 1 - 19
# 2 - 2
# 3 - 19 

En este segundo ejemplo, puede observar que perdimos intencionalmente la llamada semilla en la segunda iteración y, por lo tanto, la randint () posterior dio un número aleatorio diferente. En las otras dos operaciones, la salida fue la misma.

Búsqueda aleatoria con randrange en Python

En esta sección, veremos cómo hacer que el método seed () funcione para valores en un rango determinado. [19659016] de importación aleatoria *

def main ():
    # si te gusta regenerar un valor aleatorio,
    # entonces mantenga los mismos datos de semilla para cada operación
    myseed = 555

    semilla (myseed)
    imprimir ("# 1 número aleatorio entre el rango dado -", randrange (111,999))

    semilla (myseed)
    imprimir ("# 2 número aleatorio entre el rango dado -", randrange (111,999))

    semilla (myseed)
    imprimir ("# 3 número aleatorio entre el rango dado -", randrange (111,999))

principal()

Salida

 # 1 Número aleatorio entre el rango dado - 308
# 2 número aleatorio entre el rango dado - 308
# 3 Número aleatorio entre un rango dado - 308 

Semilla para inicializar con el método de elección

La función Python choice () selecciona un elemento aleatorio de cualquier secuencia, como una lista o un conjunto.

Si queremos mantener la misma elección en cada iteración, entonces podemos integrar la semilla con el método de elección para lograr esto.

Compruebe cómo funcionan los dos métodos entre sí.

 de la importación aleatoria *

def main ():
    # si te gusta regenerar un valor aleatorio,
    # entonces mantenga los mismos datos de semilla para cada operación
    myseed = 6

    seq = [1111, 2222, 3333, 4444, 5555, 6666]

    semilla (myseed)
    randomVal = elección (seq)
    print ("# 1 Elemento aleatorio de seq:", randomVal)

    semilla (myseed)
    randomVal = elección (seq)
    print ("# 2 Elemento aleatorio de seq:", randomVal)

    semilla (myseed)
    randomVal = elección (seq)

principal()

Salida

 # 1 Elemento aleatorio de seq: 5555
# 2 Elemento aleatorio de seq: 5555 

Calcular semilla y generar un número aleatorio

En la mayoría de los casos, queremos controlar el número aleatorio y elegirlo. Necesitamos tal cosa para producir resultados similares.

PRNG en Python depende del valor semilla para generar un valor aleatorio.

Por lo tanto, si la semilla de un número ya está disponible, entonces puede producir el mismo azar. número en cada operación.

¿Cómo determinar la semilla de un número?

Dígale, usted tiene un número M y su semilla es N. Para calcular N, necesita multiplicar M con el producto de cada dígito en M.

 M = 22
N = 22 * ​​2 * 2 = 88 

Ahora, hemos proporcionado un ejemplo para demostrar cómo decidir la semilla correcta para la generación de números aleatorios. A continuación se muestra el código de ejemplo que encuentra el valor semilla de un número.

Ejemplo

 "" "
Fecha y hora
@Python 3.5

Obtener todas las semillas posibles para un número dado.
Ej .: 24 = 12 * 1 * 2 = 24 así que 12 es la semilla de 24.
""

def findSeed (num):
    producto = 1
    semilla = 1

    while (semilla <= (num * 0.5)):
        si (num% semilla == 0):
            factor = semilla
            producto = factor
            while (no (factor == 0)):
                mod = factor% 10
                factor = factor // 10
                producto * = mod
            si (producto == num):
                print ("La semilla de {} es: {}". formato (num, semilla))
        semilla + = 1

findSeed (24)
findSeed (1716)

Salida

 La semilla de 24 es: 12
La semilla de 1716 es: 143 

Integrar semilla aleatoria con el método sample ()

Puede agrupar la semilla con la función sample y generar números aleatorios.

El método sample () permite generar los mismos valores aleatorios desde una secuencia y otros tipos.

Puedes generar los mismos valores aleatorios de la secuencia cada vez. Requiere establecer el mismo valor de inicialización antes de llamar a sample ().

Compruebe que las dos funciones funcionan juntas:

 importa aleatoriamente
#clubbing random.seed () y random.sample ()
seq = ["C++", "C#", "Python", "R", "Kotlin", "Go", "Scala", "PHP", "JavaScript"]
random.seed (5)
eg_list = random.sample (seq, 5)
print ("# 1 Sample language list", eg_list)
random.seed (5)
eg_list = random.sample (seq, 5)
imprimir ("# 2 lista de lenguaje de muestra", por ejemplo, lista)
random.seed (5)
eg_list = random.sample (seq, 5)
print ("# 3 Sample language list", eg_list) 

Salida

 # 1 Sample language list ['Kotlin', 'Go', 'Scala', 'PHP', 'JavaScript']
# 2 Muestra de lista de idiomas ['Kotlin', 'Go', 'Scala', 'PHP', 'JavaScript']
# 3 Ejemplo de lista de idiomas ['Kotlin', 'Go', 'Scala', 'PHP', 'JavaScript']

Integración aleatoria aleatoria con el método shuffle ()

Puede agrupar la semilla con la función aleatoria y generar números aleatorios.

La combinación aleatoria () y la semilla () juntas permiten generar los mismos valores aleatorios de una secuencia.

Si proporciona los mismos datos de inicialización cada vez que invoca la función de reproducción aleatoria, entonces obtendrá la misma secuencia numérica. Por lo tanto, es posible mezclar una serie con un parámetro para que el sistema proporcione la misma salida una y otra vez.

Verifique que las dos funciones trabajan juntas:

 importar aleatoriamente
num_list = [11, 22, 44, 55, 66, 77, 88, 99]
imprimir ("Antes de barajar:", num_list)
random.seed (5)
random.shuffle (num_list)
imprimir ("Después de barajar:", num_list)
num_list = [11, 22, 44, 55, 66, 77, 88, 99]
random.seed (5)
random.shuffle (num_list)
imprimir ("Después de volver a barajar:", num_list) 

Salida

 Antes de barajar: [11, 22, 44, 55, 66, 77, 88, 99]
Después de barajar: [88, 55, 22, 11, 99, 44, 77, 66]
Después de volver a barajar: [88, 55, 22, 11, 99, 44, 77, 66]

READ MORE – CLICK HERE

www.Down.co.ve


from Down.co.ve http://bit.ly/2GdUYLw
via www.Down.co.ve

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s