NumPy: Números Aleatórios

Última atualização: 2026-08-26

1. O que Você Aprenderá



2. História

Alice executa uma simulação de Monte Carlo para um modelo financeiro. Ela obtém resultados diferentes toda vez — impossível depurar. Bob mostra a ela: "Use default_rng(42) — a mesma semente sempre produz a mesma sequência. Depure com semente, implante sem." Alice fixa sua semente e encontra o bug em 5 minutos.



3. A API Moderna Generator

(1) Criando um Generator

PYTHON
import numpy as np

# Forma moderna (recomendada)
rng = np.random.default_rng(42)  # semente = 42 para reprodutibilidade

# Forma antiga (legado)
np.random.seed(42)

(2) Distribuições Comuns

PYTHON
rng = np.random.default_rng(42)

print(rng.random(3))        # 3 uniformes [0, 1)
print(rng.normal(0, 1, 3))  # 3 normais padrão
print(rng.integers(0, 10, 5))  # 5 inteiros [0, 10)
print(rng.uniform(0, 10, 3))   # 3 uniformes [0, 10)
TEXT 📖 Somente leitura
> **Output:** Execute o NumPy 2.x em seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem o NumPy pré-instalado — instale-o localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.

(3) Amostragem Aleatória

PYTHON
rng = np.random.default_rng(42)
data = np.arange(10)

# Com reposição
sample = rng.choice(data, size=5, replace=True)

# Sem reposição
sample2 = rng.choice(data, size=5, replace=False)

# Embaralhar
rng.shuffle(data)  # embaralhamento in-place
TEXT 📖 Somente leitura
> **Output:** Execute o NumPy 2.x em seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem o NumPy pré-instalado — instale-o localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.

▶ Exemplo: Gerando distribuições aleatórias (Dificuldade ⭐)

PYTHON
import numpy as np

rng = np.random.default_rng(42)

uniform = rng.random(5)
normal = rng.normal(0, 1, 5)
integers = rng.integers(1, 100, 5)

print("Uniforme [0,1):", uniform)
print("Normal N(0,1):", normal)
print("Inteiros 1-99:", integers)

Output:

TEXT 📖 Somente leitura
Uniforme [0,1): [0.77395605 0.43887844 0.85859792 0.69736803 0.09417735]
Normal N(0,1): [-0.45938412 -0.19865146  0.1113586  -1.00408446  2.02558468]
Inteiros 1-99: [79 64 66 81 96]

▶ Exemplo: Amostragem aleatória com e sem reposição (Dificuldade ⭐⭐)

PYTHON
import numpy as np

rng = np.random.default_rng(42)
data = np.arange(20)

# Com reposição — o mesmo elemento pode aparecer múltiplas vezes
with_repl = rng.choice(data, size=10, replace=True)
print("Com reposição:", with_repl)

# Sem reposição — todos os elementos são únicos
without_repl = rng.choice(data, size=10, replace=False)
print("Sem reposição:", without_repl)

# Embaralhar in-place
rng.shuffle(data)
print("Dados embaralhados:", data)

Output:

TEXT 📖 Somente leitura
Com reposição: [ 6 19  9 12  6 15  0  7  3 14]
Sem reposição: [13 10  8 11  5  1  9 16 18  4]
Dados embaralhados: [ 8  7 13 10 18  3 15  5 14 16  0  9  2  1 11 17 12 19  6  4]

▶ Exemplo: Sequências reprodutíveis com sementes (Dificuldade ⭐)

PYTHON
import numpy as np

# Mesma semente = mesma sequência
rng1 = np.random.default_rng(123)
rng2 = np.random.default_rng(123)

print("rng1:", rng1.random(4))
print("rng2:", rng2.random(4))

# Semente diferente = sequência diferente
rng3 = np.random.default_rng(456)
print("rng3:", rng3.random(4))

Output:

TEXT 📖 Somente leitura
rng1: [0.18701985 0.68208779 0.60135938 0.51034031]
rng2: [0.18701985 0.68208779 0.60135938 0.51034031]
rng3: [0.59831648 0.72572267 0.04819845 0.35980509]

P: Por que usar default_rng em vez de np.random.seed? R: default_rng cria um objeto Generator independente — você pode ter múltiplos fluxos independentes. np.random.seed define uma semente global que afeta todo o código, o que é frágil e pode causar interferência entre módulos.

P: Como obtenho resultados reprodutíveis? R: Passe uma semente fixa: rng = np.random.default_rng(42). A mesma semente sempre produz a mesma sequência. Use sementes diferentes para execuções diferentes.

P: Qual é a diferença entre random e uniform? R: rng.random(size) retorna valores em [0, 1). rng.uniform(low, high, size) retorna valores em [low, high). random é um caso especial de uniform(0, 1).


❓ Perguntas Frequentes

P: O que é a coisa mais importante a lembrar? R: As operações do NumPy são vetorizadas — evite loops Python para melhor desempenho.

P: Onde posso aprender mais? R: Consulte a documentação oficial do NumPy em numpy.org para referências detalhadas e tópicos avançados.

P: Isso funciona com o NumPy 2.x? R: Sim — todos os exemplos são compatíveis com o NumPy 2.x. Algumas APIs mais antigas (como np.random.seed) ainda são suportadas, mas as alternativas modernas são recomendadas.

📖 Resumo



📝 Exercícios

  1. Básico (Dificuldade ⭐): Use default_rng(42) para gerar 10 floats aleatórios, 10 inteiros aleatórios (0-100) e 10 números de uma distribuição normal. Imprima-os.

  2. Intermediário (Dificuldade ⭐⭐): Gere 1000 números aleatórios de uma distribuição normal. Compute a média e o desvio padrão. Verifique se são aproximadamente 0 e 1.

  3. Desafio (Dificuldade ⭐⭐⭐): Use rng.choice com e sem reposição para amostrar 10 itens de um dataset de 100. Explique a diferença e quando usaria cada um.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%