Apuntes_Python/02_conceptos/12_random_numbers
2024-01-16 12:23:41 -03:00
..
a_numeros_aleatorios.py init Apuntes Python 2022-12-24 22:41:20 -03:00
b_modulo_secrets.py init Apuntes Python 2022-12-24 22:41:20 -03:00
README.md ed: domain links on files <kickto.net >letz.dev 2024-01-16 12:23:41 -03:00

Numeros Aleatorios

Ejemplos:

Generar Números (seudo)Aleatorios

import random

# Genera números aleatorios 'float' desde 0 a 1
a = random.random()

print(a)
# ej. 0.020823109453158017


# Número (float) aleatorio con rango (inicio, final)
a = random.uniform(1, 10)

print(a)
# ej. 4.19839993456984


# Número (int) aleatorio con rango incluido (inicio, final)
a = random.randint(1, 10)

print(a)
# ej. 10


# Número (int) aleatorio con rango no incluido (inicio, final)
a = random.randrange(1, 10)
print(a)    # ej. 8


# Número (estadistico) aleatorio (nu, sigma)
a = random.normalvariate(0, 1)

print(a)
# ej. -0.8380968602149392


# Objeto aleatorio de una lista
lista = list("ABCDEFGHI")
a = random.choice(lista)

print(a)
# ej. E


# Objetos únicos aleatorios de una lista
lista = list("ABCDEFGHI")
a = random.sample(lista, 3)

print(a)
# ej. ['D', 'I', 'F']


# Objetos no únicos aleatorios de una lista
lista = list("ABCDEFGHI")
a = random.choices(lista, k=3)

print(a)
# ej. ['G', 'E', 'E']


# Reorden aleatorio de elementos
lista = list("ABCDEFGHI")
random.shuffle(lista)

print(lista)
# ej. ['C', 'D', 'I', 'F', 'B', 'H', 'G', 'A', 'E']


# Reproducir aletoriedad
random.seed(1)

print(random.random())
# 0.13436424411240122
print(random.randint(1,10))
# 2

random.seed(2)

print(random.random())
# 0.9560342718892494
print(random.randint(1,10))
# 1

random.seed(1)

print(random.random())
# 0.13436424411240122
print(random.randint(1,10))
# 2

Secrets

Módulo que ofrece aleatoriedad para uso en claves, tokens, autentificación, etc.
Son algoritmos mas lentos, pero ofrecen aleatoriedad 'verdadera'

import secrets

# Número aleatorio entre 0 y 9
a = secrets.randbelow(10)

print(a)
# 8

# Número aleatorio entre 0 y 15 (0000 - 1111)
a = secrets.randbits(4)

print(a)
# 7

lista = list("ABCDEFGHIJK")
a = secrets.choice(lista)

print(a)
# H

numpy

Para trabajar con arrays

import numpy as np

# Arreglo de floats aleatorios de una dimensión con rango 3
a = np.random.rand(3)
print(a)    # [0.84579967 0.02253312 0.11607143]

# Arreglo de floats aleatorios de 3 dimensiones con rango 3
a = np.random.rand(3, 3)
print(a)
#   [[0.68013638 0.81510406 0.90462866]
#    [0.92490363 0.585091   0.57115841]
#    [0.42848118 0.8946414  0.57214838]]

# Arreglo de enteros aleatorios de 3 dimensiones con rango, limite final excluido
# la tupla especifica la cantidad de elementos y las dimensiones del arreglo
a = np.random.randint(0, 10,  (3, 4))
print(a)
#   [[8 2 9 5]
#    [0 3 3 3]
#    [0 2 9 9]]

# Reordenar arreglo de forma aleatoria
arreglo = np.array([[1,2,3], [4,5,6], [7,8,9]])
np.random.shuffle(arreglo)
print(arreglo)
#   [[4 5 6]
#    [1 2 3]
#    [7 8 9]]

# Semillas generadoras (diferentes a las del módulo random de python)
np.random.seed(1)
print(np.random.rand(3,3))
#   [[4.17022005e-01 7.20324493e-01 1.14374817e-04]
#    [3.02332573e-01 1.46755891e-01 9.23385948e-02]
#    [1.86260211e-01 3.45560727e-01 3.96767474e-01]]

np.random.seed(1)
print(np.random.rand(3,3))
#   [[4.17022005e-01 7.20324493e-01 1.14374817e-04]
#    [3.02332573e-01 1.46755891e-01 9.23385948e-02]
#    [1.86260211e-01 3.45560727e-01 3.96767474e-01]]