top of page
partfragrefragimi

random —Generar números pseudoaleatorios — documentación de Python - 3.11.4[^2^]



El módulo secrets se usa para generar números aleatorios criptográficamente fuertes, apropiados para trabajar con datos como contraseñas, autenticación de cuentas, tokens de seguridad y secretos relacionados.


En el post de hoy, me gustaría describir y explicar, el uso del módulo aleatorio en el lenguaje de programación Python. Este módulo aleatorio nos proporciona acceso a funciones que soportan muchas operaciones, además de que una de las características mas importantes de este módulo es que te permite generar números aleatorios.




generar un numero aleatorio en python



En Python, al igual que en casi cualquier otro lenguaje de progrmación lo más probable es que tengas que generar un número o valor aleatorio en algún momento de tu programación con este fantástico lenguaje, y gracias a este post sabrás cómo usar esta poderosa herramienta.


Si utilizas la función choice generarás un valor aleatorio partiendo de una secuencia. Esta función de selección es la mas usada si necesitamos elegir un elemento al azar de cualquier lista en Python. Aquí tienes un ejemplo:


Para los enteros, existe una selección uniforme dentro de un rango. Para las secuencias, existe una selección uniforme de un elemento aleatorio, una función para generar una permutación aleatoria de una lista in-situ y una función para el muestreo aleatorio sin reemplazo.


El módulo random también proporciona la clase SystemRandom, la cuál usa la función del sistema os.urandom() para generar números aleatorios a partir de fuentes proporcionadas por el sistema operativo.


Tenga en cuenta que incluso para pequeños len(x), el número total de permutaciones de x puede crecer rápidamente más que el periodo de muchos generadores de números aleatorios. Esto implica que la mayoría de las permutaciones de una secuencia larga nunca se pueden generar. Por ejemplo, una secuencia de longitud 2080 es la más grande que cabe dentro del período del generador de números aleatorios de Mersenne Twister.


Clase que utiliza la función os.urandom() para generar números aleatorios a partir de fuentes proporcionadas por el sistema operativo. No está disponible en todos los sistemas. No se basa en el estado del software y las secuencias no son reproducibles. En consecuencia, el método seed() no tiene efecto y es ignorado. Los métodos getstate() y setstate() lanzan NotImplementedError si se les llama.


Para generar números aleatorios en Python se hace uso del módulo random de la biblioteca estándar. Este módulo ofrece una serie de funciones que generan números aleatorios de manera diferente. En este artículo repasaremos cuáles son las principales funciones y sus usos.


Para generar números aleatorios en Python de valor entero, se suele utilizar la función randint(). La función randint(a, b) devuelve un número entero comprendido entre a y b (ambos inclusive) de forma aleatoria. Ejemplos útiles de esta función: determinar quién comienza una partida (jugador/PC); simular el dado del parchís, etc:


En el primer post de esta miniserie, explicamos el motivo por el cual necesitamos generar conjuntos de datos aleatorios para entrenar nuestros modelos de aprendizaje automático. En el post de hoy, veremos 5 formas distintas de hacerlo con Python.


En el post anterior ya comentamos que estos números pseudo-aleatorios son perfectamente válidos para la mayor parte de problemas que modelizamos mediante algoritmos de machine learning. Sin embargo, no nos sirven para trabajar en entornos de criptografía y seguridad. En estos casos, se utiliza el módulo secrets que permite generar números verdaderamente aleatorios (true-random number generators (TRNG).


La función gauss() usa como argumentos la media y la desviación estándar, para generar valores aleatorios que sigan una distribución normal. En este ejemplo, generamos un conjunto de números (pseudo)-aleatorios que siguen una distribución gaussiana, con media 0 y desviación estándar 1.


los randint() o randrange() es la forma preferida de generar un número aleatorio a partir de una secuencia continua. Para elegir un elemento aleatorio de una secuencia como una lista o una tupla, debe usar el random.choice() función.


los secrets.randbelow() Se prefiere la función para asegurar criptográficamente números aleatorios de una secuencia continua. Para generar un número aleatorio criptográficamente seguro a partir de una secuencia como una lista o una tupla, utilice el secrets.choice() función.


La aleatoriedad está en todas partes. Cuando lanzas una moneda o un dado, nunca puedes estar seguro del resultado final. Esta impredecibilidad tiene muchas aplicaciones como determinar los ganadores de un sorteo o generar casos de prueba para un experimento con valores aleatorios producidos basados en un algoritmo.


Casi todas las conclusiones en este módulo dependen de la función básica random(), la cuál generará un flotante aleatorio mayor o igual a cero y menos que uno. Python usa el Mersenne Twister para generar los flotantes. Este produce flotantes con precisión de 53 bits con un periodo de 2**19937-1. Es de hecho el generador de números pseudo aleatorios de propósito general usado más ampliamente.


Algunas veces, quieres que el generador de números aleatorios reproduzca la secuencia de números que creó la primera vez. Esto puede ser logrado proporcionando el mismo valor semilla ambas veces para el generador usando la función seed(s, version). Si el parámetro s es omitido, el generador usará la hora actual del sistema para generar los números. Aquí está un ejemplo:


De manera similar, puedes usar randrange(a, b[,step]) para generar un número aleatorio desde range(a, b, step). Por ejemplo, usar random.randrange(0, 100, 3) solo devolverá aquellos números entre 0 y 100 que también sean divisibles por 3.


Si quieres barajar una secuencia en vez de seleccionar un elemento aleatorio de esta, puedes usar la función shuffle(seq). Esto resultará en un barajeo en lugar de la secuencia. Para una secuencia con solo 10(n) elementos, puede haber un total de 3628800(n!) arreglos diferentes. Con una secuencia más grande, el número de posibles permutaciones será incluso mayor--esto implica que la función nunca puede generar todas las permutaciones de una secuencia grande.


En esta sección, aprenderás sobre funciones que pueden ser usadas para generar número aleatorios basados sobre distribuciones de valor real específicas. Los parámetros de la mayoría de estas funciones son nombradas por su variable correspondiente en la ecuación actual de esa distribución.


Digamos que necesitas generar un número aleatorio entre bajo y alto de tal manera que tenga una probabilidad más alta de caer en el vacío de otro modo de número. Puedes hacer esto con la función triangular(low, high, mode). Los valores low y high serán 0 y 1 por defecto. De manera similar, el valor mode está al punto medio del valor bajo y alto, resultando en una distribución simétrica.


Hay muchas otras funciones también para generar números aleatorios basado en distribuciones diferentes. Como ejemplo, puedes usar normalvariate(mu, sigma) para generar un número aleatorio basado en una distribución normal, con mu como media y sigma como desviación estándar.


Como acabamos de ver, es posible generar números aleatorios con distribución uniforme así como distribución triangular o normal. Incluso en un rango finito como 0 a 100, hay un número infinito de flotantes que pueden ser generados. Qué pasa si hay un conjunto finito de elementos y quieres agregar más ponderación a algunos valores específicos cuando seleccionas un número aleatorio? Esta situación es común en sistemas de lotería en donde los números con mejor recompensa tienen una mayor ponderación.


Este módulo puede ser útil en muchas situaciones como barajar las preguntas en una tarea o generar nombres de usuario o contraseñas aleatorias para tus usuarios usando la función shuffle(). También puedes generar número aleatorios de manera uniforme así como darle peso a números en un rango específico. En nuestro siguiente tutorial, estaremos usando las funciones de este módulo para generar información aleatoria para análisis estadístico.


Podremos generar un número aleatorio entero que se encuentre entre dos valores utilizando la función randint(). Como parámetros le enviaremos dos enteros. El resultado será un número aleatorio entre esos dos valores, ambos inclusive.


Podremos generar un número aleatorio entero que se encuentre entre dos valores y además que mantenga una distancia con el número generado anteriormente. Esta distancia de establece en el parámetro step.


Para confirmar la distribución de la que se extraen los números aleatorios podemos generar cien mil números aleatorios a partir de una distribución normal de media 5 y desviación estándar 3 y mostrar su histograma:


Como ya seguro sabrán, las computadoras no pueden en realidad generar números aleatorios per se, sino que generan números pseudoaleatorios o cuasialeatorios. Esto debido al determinismo de la computadora misma.


En este último paso hay distintas opciones para generar números aleatorios en distintas distribuciones. En nuestra lista utilizamos una distribución uniforme, pero también las hay normal bajo curandGenerateNormal() o log-normal con curandGenerateLogNormal().


Para generar pseudo-números aleatorios con el algoritmo MT tendremos que importar algunas librerías extras, las cuales están señaladas en el código escrito a continuación. Se importan no sólo algunas funciones extras, sino también parámetros ya computados.


cuRAND no es una librería tan sencilla para generar números aleatorios como se puede observar en otros lenguajes de programación. Sin embargo detrás de todas estas líneas de código se encuentran grandes ventajas como el control simultáneo de los generadores de números pseudo-aleatorios, además de la gran eficiencia de los códigos en parelelo.A lo largo de los siguientes notebooks iremos sacando todo el jugo que esta librería puede darnos. Sin embargo primero tenremos que pasar por algunos ejemplos clásicos como caminantes aleatorios o distribuciones de probabilidad. Así que vayamos tomando vuelo porque esto apenas empieza. 2ff7e9595c


0 views0 comments

Recent Posts

See All

Baixar escola 2017

Baixar School 2017: um drama coreano que vai fazer você rir e chorar Se você está procurando um drama coreano que vai fazer você rir,...

コメント


bottom of page