Arrays NumPy
Objetos ndarray do NumPy armazenam dados numéricos homogêneos e expõem operações vetorizadas que substituem loops lentos em Python.
Busque em todas as páginas da documentação
Objetos ndarray do NumPy armazenam dados numéricos homogêneos e expõem operações vetorizadas que substituem loops lentos em Python.
Cartão de referência rápida - pronto para copiar e colar.
import numpy as np
# Cria, converte dtype, vetoriza
a = np.array([1, 2, 3], dtype=np.float64)
b = np.arange(3) # [0, 1, 2]
result = a * 2 + b # broadcasting + ufunc
print(result.shape, result.dtype)Quando usar isso:
import numpy as np
# Matriz de receita mensal: linhas = regiões, colunas = meses
revenue = np.array(
[[120_000, 135_000, 128_000],
[98_000, 102_000, 110_000],
[150_000, 148_000, 155_000]],
dtype=np.int64,
)
# Taxa de crescimento por região vs mês anterior (coluna 0 não tem anterior)
growth = np.diff(revenue, axis=1) / revenue[:, :-1]
# Normaliza cada região pela sua própria média (broadcasting)
normalized = (revenue - revenue.mean(axis=1, keepdims=True)) / revenue.std(axis=1, keepdims=True)
# Mascara células com desempenho inferior
threshold = revenue.mean()
under = np.where(revenue < threshold, revenue, 0)
print("growth shape:", growth.shape)
print("normalized mean per row:", normalized.mean(axis=1))
print("underperforming total:", under.sum())O que isso demonstra:
dtype explícito para matemática inteira estávelnp.diff ao longo de axis=1 para mudança mês a mês coluna a colunakeepdims=True para que estatísticas de linha se alinhem com a forma da matriznp.where como um condicional vetorizado sem if Python por célulandarray é um buffer contíguo mais metadados de forma/passos - todos os elementos compartilham um único dtype.arr.copy()) ou de atribuições incompatíveis.| Função | Uso Típico |
|---|---|
np.array | De sequências Python |
np.arange / np.linspace | Intervalos espaçados uniformemente |
np.zeros / np.ones / np.full | Buffers pré-alocados |
np.random.default_rng | Dados aleatórios reproduzíveis |
| dtype | Quando |
|---|---|
int32 / int64 | Contagens e IDs |
float32 | Grandes recursos de ML onde a troca de precisão é aceitável |
float64 | Precisão padrão de análise |
bool | Máscaras e predicados |
import numpy as np
# Prefira dtype explícito na ingestão
ids = np.array(["1", "2", "3"], dtype=np.int64) # ValueError - converta strings primeiro
# Use default_rng, não o legado np.random.seed
rng = np.random.default_rng(42)
samples = rng.normal(0, 1, size=10_000)
# np.ndarray não é um substituto para list - .append não existenp.array - np.array([1, 2.5, 3]) se torna float64 e pode surpreender código inteiro downstream. Correção: converta explicitamente na criação./ sempre promove para float; // trunca em direção ao infinito negativo. Correção: use np.floor_divide quando precisar de truncamento consistente.arr[[0, 2]]) retorna uma cópia; fatias frequentemente retornam views. Correção: chame .copy() antes de modificar resultados filtrados.np.mean([1, np.nan, 3]) é NaN a menos que você passe nanmean. Correção: use np.nanmean ou mascare primeiro.(3, 4) + (4,) funciona; (3, 4) + (3,) gera erro a menos que você redimensione. Correção: alinhe com arr[:, np.newaxis] ou reshape.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Listas Python | Sequências minúsculas, objetos heterogêneos | Transformações numéricas de milhões de elementos |
| pandas Series | Dados 1-D rotulados com valores ausentes | Álgebra linear bruta em buffers não rotulados |
| Polars Series | Pipelines colunares preguiçosos em escala | Você só precisa de um ufunc NumPy rápido |
Módulo array (stdlib) | Arrays numéricos tipados sem dependência NumPy | Você precisa de broadcasting ou álgebra linear |
np.broadcast_to(...).copy().float32 para tensores grandes onde ~7 dígitos decimais são suficientes.float64 para agregações financeiras, a menos que você tenha um ganho de memória medido.import numpy as np
rng = np.random.default_rng(42)
rng.integers(0, 100, size=5)default_rng é a API moderna e estatisticamente mais segura.int64 antes de sum: arr.astype(np.int64).sum().np.sum(arr, dtype=np.int64).np.str_ de largura fixa existem, mas pandas/Polars lidam melhor com texto.(n,) em (n, m) precisa de (n, 1).mask[:, np.newaxis] ou np.broadcast_to.safe = arr[mask].copy()
safe *= 2 # não toca em arr@ e np.dot são multiplicação de matrizes.@ segue as regras de empilhamento PEP 465 - prefira @ por clareza.timeit em tamanhos de array que você realmente processa.n cruzam o ponto onde listas Python ganham devido à sobrecarga de criação.Versões da Pilha: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026