Ecosistema de Números Aleatorios en Julia – El Pseudo Lado

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *