176 lines
3.6 KiB
Markdown
176 lines
3.6 KiB
Markdown
|
# Numeros Aleatorios
|
||
|
|
||
|
Ejemplos:
|
||
|
- [Módulo Random](https://gitea.kickto.net/devfzn/Apuntes_Python/src/branch/master/02_conceptos/12_random_numbers#generar-n%C3%BAmeros-seudo-aleatorios)
|
||
|
- [Módulo Secret](https://gitea.kickto.net/devfzn/Apuntes_Python/src/branch/master/02_conceptos/12_random_numbers#secrets)
|
||
|
- [Módulo NumPy](https://gitea.kickto.net/devfzn/Apuntes_Python/src/branch/master/02_conceptos/12_random_numbers#numpy)
|
||
|
|
||
|
## Generar Números (seudo)Aleatorios
|
||
|
|
||
|
```python
|
||
|
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'
|
||
|
|
||
|
```python
|
||
|
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
|
||
|
|
||
|
```python
|
||
|
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]]
|
||
|
```
|