Cuando hablamos de aleatoriedad en general, no es algo que no deba poseer repetición , es algo que genera datos que son impredecibles .
Los números aleatorios son muy esenciales cuando se trata de criptografía , simulaciones MonteCarlo , etc. Cada vez que inicia sesión en un servicio, realiza una transacción en línea, se invocan números aleatorios del sistema para asegurar el proceso ( cifrado ).
Pero nuestras computadoras, específicamente la CPU , son bestias que procesan números, que siguen ciegamente las instrucciones que se les dan. Por lo tanto, son prácticamente incapaces de elegir inherentemente cualquier número. Ahí es donde interviene la intervención humana.
Ahora bien, hay dos formas. La forma rápida pero ineficiente y la forma lenta pero casi perfecta .
El primero pertenece a los PRNG (generadores de números pseudoaleatorios) y el segundo a los TRNG (generadores de números aleatorios verdaderos) . Consulte este enlace si desea probar algunos algoritmos RNG .
La mayoría de los sistemas operativos ( Linux , Windows , etc.) tienen un grupo de aleatoriedad incorporado . del cual se toman muestras de números aleatorios para diversos usos. El grupo de entropía que consiste en entropía (aleatoriedad) recopilada de varias fuentes en la computadora. Por ejemplo: las térmicas de la CPU/GPU , el tiempo de las pulsaciones de teclas del usuario , el movimiento del mouse , la programación de la CPU y otros sensores que proporcionan una entrada impredecible .
Cuando se generan números aleatorios , la entropía del grupo disminuye ya que ahora se proporciona parte de la información sobre el grupo de entropía. Por lo tanto, debe reponerse mediante un proceso llamado agitación .
La familia de procesadores Ivy Bridge de Intel tiene una función integrada a saber. clave segura , que se refiere a un generador de números aleatorios dedicado dentro de ellos, que compone un conjunto de instrucciones especial llamado RDRAND que devuelve números aleatorios.
Llegando a RNG’s en Julia . Hay un buen soporte para la generación de números pseudoaleatorios en Julia.
Inherentemente, Julia usa el Mersenne Twisterlibrería para la generación de números aleatorios. Además de MersenneTwister, Julia también proporciona el tipo RandomDevice , que envuelve la entropía proporcionada por el sistema operativo .
Generación de datos aleatorios
Función al azar()
Sintaxis:
rand([rng=GLOBAL_RNG], [set..], [dimensions...])
Selecciona un elemento aleatorio o una array de elementos aleatorios del conjunto de valores especificado por set , donde set puede ser:
- una colección indexable (por ejemplo, 1:9 o (‘x’, “y”, :z)),
- un objeto AbstractDict o AbstractSet ,
- una string
- un tipo (por ejemplo: estructura )
Ejemplo:
Python3
# Generate 2 random numbers of type Int rand(Int, 2) # Randomly choose a number between 3 and 5 rand((3, 5)) # Create a 2x3 array # that contains random floating type values rand(Float64, (2, 3))
Producción:
Función rand!()
RandomNumbers.jl es una biblioteca que brinda soporte extendido para la generación de números aleatorios.
Sintaxis:
rand!([rng=GLOBAL_RNG], Arr, [set=eltype(Arr)])
Llena la array Arr con valores aleatorios. Si se especifica conjunto , los valores se seleccionan aleatoriamente del conjunto. Simplemente copia los valores aleatorios generados desde rand() a Arr pero sin asignar una nueva array.
Ejemplo:
Python3
# Import the library using Random # Using the MersenneTwister rng # Here 1234 is a seed value rng = MersenneTwister(1234); # Create an Array containing zeros Arr = zeros(5) # Populate Arr with random values # Generated by our rng rand !(rng, Arr)
Producción :
función bitrand()
Sintaxis:
bitrand([rng=GLOBAL_RNG], [dimensions])
Genera un Array (de tipo BitArray ) que contiene valores booleanos aleatorios ( 0/1 ).
Ejemplo:
Python3
# Use the MersenneTwister rng rng = MersenneTwister(1234); # Generate 10 random bits bitrand(rng, 10)
Producción :
Función randn()
Sintaxis:
randn([rng=GLOBAL_RNG], [T=Float64], [dimensions])
Genera un número aleatorio normalmente distribuido de tipo T con media 0 y desviación estándar 1 . Opcionalmente, generará una array de números aleatorios distribuidos normalmente si se proporciona el parámetro de dimensiones.
Ejemplo:
Python3
# Import the library using Random # Using the rng rng = MersenneTwister(1234); # Generate a complex number # based normal distribution randn(rng, ComplexF64) randn(rng, ComplexF32, (2, 3))
Producción:
Función randstring()
Sintaxis:
randstring([rng=GLOBAL_RNG], [characters], [length])
Crea una string aleatoria de tamaño length , que consta de caracteres , que por defecto es el conjunto de letras mayúsculas y minúsculas y los dígitos 0-9. El argumento rng opcional especifica un generador de números aleatorios.
Ejemplo:
Python3
# Import the library using Random # Seed the rng Random.seed !(0); # Return an random string randstring() # Return a random string # of size 6, made from characters a-z randstring(MersenneTwister(0), 'a':'z', 6) # To generate random DNA sequence randstring("ACGT")
Producción:
Función aleatoria()
Sintaxis:
randperm([rng=GLOBAL_RNG], n::Integer)
Construya una permutación aleatoria de longitud n.
Ejemplos:
Python3
# Import the library using Random # Using the rng rng = MersenneTwister(1234); # Generate a random permutation of size 4 randperm(rng, 4) # Store the generated values in Arr randperm !(rng, Vector{Int}(undef, 4))
Producción:
Función RandomDevice()
Sintaxis:
RandomDevice()
Crea un objeto RNG RandomDevice que genera un flujo de números aleatorios para los que se obtiene la entropía del sistema operativo .
función Muestreador()
Sintaxis:
Sampler(rng, x, repetition)
Devuelve un objeto de muestra que se puede usar para generar valores aleatorios de rng para x .
Cuando se usa Sampler(rng, x, repeat) , rand(rng, sp) para dibujar valores aleatorios, la repetición puede ser Val(1) o Val(Inf).
Ejemplo :
Python3
# import the library using Random # Define the rng rng = RandomDevice() # Define the sampler s = Random.Sampler(rng, Val(1))
Producción:
Generando valores a partir de un tipo
Para un tipo T , se supone que si se define rand(T) , se producirá un objeto de tipo T. La muestra predeterminada para tipos es SamplerType .
Sintaxis:
rand(rng::AbstractRNG, ::Random.SamplerType{T})
Define la generación aleatoria para valores de tipo T
Esto es particularmente útil en casos como el ejemplo clásico de un dado que da un número aleatorio.
Python3
# declare a dice type struct Dice n::Int # number on the dice end # Define the rand function to generate # random numbers between 1-6 Random.rand(rng::AbstractRNG, ::Random.SamplerType{Dice}) = Dice(rand(rng, 1:6)) # generate random number of sides # based on the default rng rand(Dice) # generate random number of sides # based on the MersenneTwister rng rand(MersenneTwister(0), Dice)
Producción:
Publicación traducida automáticamente
Artículo escrito por arsh_sharma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA