NumPy: Criando Arrays
Última atualização: 2026-08-26
Criando Arrays
1. O que Você Aprenderá
- ❶ Criando a partir de objetos Python
- ❷ Sequências numéricas (arange / linspace / logspace)
- ❸ Arrays pré-preenchidos (zeros / ones / eye / full)
- ❹ Geração de números aleatórios
- ❺ Leitura de arquivos
2. História
Charlie precisa de 100 ângulos igualmente espaçados de 0 a 2π. Loop Python: 5 linhas. np.linspace: 1 linha.
linspace(0, 2*pi, 100)significa "pegar 100 pontos igualmente espaçados de 0 a 2π" — o código é a documentação.
3. Conceitos-Chave
(1) Criando a Partir de Objetos Python
A abordagem mais básica — converter listas Python (ou listas aninhadas) para arrays NumPy:
import numpy as np
a = np.array([1, 2, 3]) # 1D a partir de lista
b = np.array([[1, 2], [3, 4]]) # 2D a partir de lista aninhada
c = np.array([1, 2, 3], dtype=float) # especificar dtype
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
Comparação de Métodos de Criação
| Método | Sintaxe | Fonte de Entrada | Uso Típico |
|---|---|---|---|
np.array |
np.array(obj) |
Lista/tupla Python | Converter dados existentes |
np.arange |
np.arange(start, stop, step) |
Intervalo numérico | Sequências de inteiros/floats |
np.linspace |
np.linspace(a, b, n) |
Início, fim, contagem | Contagem precisa de elementos |
np.zeros |
np.zeros(shape) |
Shape | Inicializar com zeros |
np.ones |
np.ones(shape) |
Shape | Inicializar com uns |
np.full |
np.full(shape, val) |
Shape + valor de preenchimento | Inicializar com qualquer valor |
np.random.rand |
np.random.rand(n) |
Contagem de elementos | Inicialização aleatória |
np.fromfunction |
np.fromfunction(fn, shape) |
Função + shape | Gerar por fórmula |
(2) Sequências Numéricas
arange
np.arange(5) # [0 1 2 3 4]
np.arange(1, 10, 2) # [1 3 5 7 9]
np.arange(0, 1, 0.3) # [0. 0.3 0.6 0.9]
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
linspace
np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]
np.linspace(0, 2*np.pi, 100) # 100 pontos de 0 a 2pi
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
logspace
np.logspace(1, 3, 3) # [ 10. 100. 1000.] -- 10^1, 10^2, 10^3
np.logspace(0, 2, 5) # 5 pontos de 10^0 a 10^2
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
arange vs linspace vs logspace
| Característica | arange |
linspace |
logspace |
|---|---|---|---|
| Controle | início, fim, passo | início, fim, número | exp_início, exp_fim, número |
| Inclui o fim | Não | Sim | Sim |
| Espaçamento | Linear | Linear | Logarítmico |
| Precisão de float | Pode ter erros | Exata | Exata |
| Uso típico | Índices inteiros | Amostras para gráficos | Escalas de frequência/log |
(3) Arrays Pré-Preenchidos
np.zeros(3) # [0. 0. 0.]
np.zeros((2, 3)) # matriz 2x3 de zeros
np.ones((2, 2)) # 2x2 de uns
np.eye(3) # identidade 3x3
np.full((2, 3), 7) # 2x3 preenchido com 7
np.empty((2, 2)) # 2x2 não inicializado (NÃO são zeros!)
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
zeros vs empty vs full
| Função | Valor Inicial | Velocidade | Segurança | Caso de Uso |
|---|---|---|---|---|
zeros |
Todos zeros | Média | Seguro | Precisa de um valor inicial conhecido |
empty |
Indefinido | Rápida | Inseguro | Sobrescrever todos os elementos imediatamente |
full |
Valor personalizado | Média | Seguro | Precisa de um valor inicial diferente de zero |
(4) Criação de Números Aleatórios
np.random.rand(3) # 3 uniformes [0, 1)
np.random.rand(2, 3) # 2x3 uniformes
np.random.randn(3) # 3 normais padrão
np.random.randint(0, 10, 5) # 5 inteiros em [0, 10)
np.random.seed(42) # definir semente para reprodutibilidade
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
Referência Rápida de Funções Aleatórias
| Função | Distribuição | Intervalo | Tipo de Retorno |
|---|---|---|---|
rand(d0, d1, ...) |
Uniforme | [0, 1) | float |
randn(d0, d1, ...) |
Normal padrão | (-∞, +∞) | float |
randint(low, high, size) |
Inteiro uniforme | [low, high) | int |
uniform(low, high, size) |
Uniforme | [low, high) | float |
normal(loc, scale, size) |
Normal | (-∞, +∞) | float |
choice(a, size) |
Uniforme discreta | Elementos de a | depende |
(5) Leitura de Arquivos
data = np.loadtxt('data.txt') # texto simples
data = np.loadtxt('data.csv', delimiter=',') # CSV
data = np.genfromtxt('data.csv', delimiter=',', # lidar com ausentes
filling_values=0)
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
fromfunction — gerar arrays por função de coordenadas:
np.fromfunction(lambda i, j: i + j, (3, 3))
# [[0. 1. 2.]
# [1. 2. 3.]
# [2. 3. 4.]]
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
▶ Exemplo
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
: arange vs linspace vs logspace (Dificuldade ⭐)
import numpy as np
# arange: baseado em passo
a = np.arange(0, 10, 2) # [0 2 4 6 8]
print("arange:", a)
# linspace: baseado em número
b = np.linspace(0, 10, 6) # 6 pontos: 0, 2, 4, 6, 8, 10
print("linspace:", b)
# logspace: logarítmico
c = np.logspace(1, 4, 4) # [10, 100, 1000, 10000]
print("logspace:", c)
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
▶ Exemplo
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
: zeros / ones / eye / full (Dificuldade ⭐)
import numpy as np
z = np.zeros((2, 3))
print("zeros:\n", z)
o = np.ones((3, 2))
print("ones:\n", o)
e = np.eye(4)
print("eye:\n", e)
f = np.full((2, 3), 9.0)
print("full:\n", f)
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
▶ Exemplo
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
: Lista aninhada para array 2D (Dificuldade ⭐)
import numpy as np
data = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
a = np.array(data)
print("shape:", a.shape) # (3, 3)
print("dtype:", a.dtype) # int64
print("ndim:", a.ndim) # 2
print("array:\n", a)
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
▶ Exemplo
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
: Geração de array aleatório (Dificuldade ⭐)
import numpy as np
np.random.seed(42)
print("rand(3):", np.random.rand(3))
print("randn(3):", np.random.randn(3))
print("randint(0,10,5):", np.random.randint(0, 10, 5))
print("uniform(0,1,3):", np.random.uniform(0, 1, 3))
print("normal(0,1,3):", np.random.normal(0, 1, 3))
> **Saída:** Execute NumPy 2.x no seu ambiente Python local para ver a saída do ndarray. O servidor Piston não tem NumPy pré-instalado — instale localmente (`pip install numpy`) e compare. Os valores reais podem variar conforme a versão do NumPy e a semente aleatória.
4. Tabelas Comparativas
(1) Método de Criação por Caso de Uso
| Necessidade | Método | Por Quê |
|---|---|---|
| Converter dados existentes | np.array(data) |
Conversão direta |
| Sequência de inteiros | np.arange(n) |
Leve |
| Sequência float precisa | np.linspace(a, b, n) |
Contagem exata |
| Matriz de valor fixo | np.full(shape, val) |
Qualquer valor de preenchimento |
| Matriz identidade | np.eye(n) |
Álgebra linear |
| Inicialização aleatória | np.random.rand(...) |
Pesos de ML |
| Carregar de arquivo | np.loadtxt(file) |
Dados externos |
(2) arange vs range do Python
| Característica | range |
np.arange |
|---|---|---|
| Retorna | Iterador lazy | ndarray (materializado) |
| Memória | O(1) | O(n) |
| Passo float | Não | Sim |
| Velocidade (iteração) | Mais lento | Mais rápido (vetorizado) |
| Caso de uso | Looping | Criação de arrays |
5. Diagrama de Princípios
graph TB
A[Lista Python] -->|np.array| B[ndarray]
C[arange / linspace] --> B
D[zeros / ones / eye] --> B
E[funções aleatórias] --> B
F[arquivo: loadtxt] --> B
B --> G[dtype uniforme]
B --> H[memória contígua]
B --> I[operações vetorizadas]
❓ Perguntas Frequentes
P: Qual a diferença entre arange e linspace? R: arange recebe um tamanho de passo e não inclui o valor final. linspace recebe uma contagem e inclui ambos os extremos. Use arange para sequências de inteiros, linspace quando precisa de um número específico de pontos.
P: empty() é realmente vazio? R: Não — ela aloca a memória mas não a inicializa. Os "valores" são o que quer que estivesse naquela memória antes. É mais rápida mas perigosa. Só use quando vai preencher todos os elementos em seguida.
P: Qual é a forma moderna de gerar números aleatórios? R: Use
np.random.default_rng(seed)para criar um objeto Generator, depois chame.random(),.normal(),.integers(), etc. O antigonp.random.seed()ainda funciona mas é considerado legado.
P: Posso criar um array a partir de uma expressão geradora? R:
np.array(x for x in range(10))não funciona — cria um array 0D contendo o objeto gerador. Usenp.fromiter((x for x in range(10)), dtype=int)em vez disso.
P: Como lidar com dados ausentes ao carregar CSV? R: Use
np.genfromtxt('file.csv', delimiter=',', filling_values=0)para substituir valores ausentes por um padrão, ounp.nan.
📖 Resumo
np.array()converte listas Python para ndarrays; dtype é inferido automaticamentearange(start, stop, step)cria sequências igualmente espaçadas;linspacecontrola a contagemzeros/ones/eye/fullcriam arrays pré-preenchidos;emptyé mais rápida mas não inicializada- Funções aleatórias:
rand(uniforme),randn(normal),randint(inteiro),choice(amostragem) loadtxtegenfromtxtleem arrays de arquivos texto;fromfunctiongera por fórmula
📝 Exercícios
-
Básico (Dificuldade ⭐): Crie os seguintes arrays: (a) inteiros de 0 a 9, (b) 10 pontos igualmente espaçados de 0 a 1, (c) uma matriz identidade 3x3, (d) um array 2x4 de todos 7s.
-
Intermediário (Dificuldade ⭐⭐): Use
np.loadtxtpara ler um arquivo CSV com 3 colunas: nome (string), idade (int), salário (float). Usenp.genfromtxtcomdtype=Nonepara lidar com os tipos mistos. Imprima o salário médio. -
Desafio (Dificuldade ⭐⭐⭐): Compare o desempenho de criar 10 milhões de números aleatórios usando
np.random.rand(10_000_000)vs uma list comprehension Python. Registre a diferença de tempo e memória. Depois usenp.random.default_rng()e compare a velocidade.