Indexação e Remodelagem do NumPy
A indexação seleciona e reorganiza dados de ndarray ao longo de eixos; a remodelação altera a forma sem mudar os valores quando o tamanho total permanece constante.
Busque em todas as páginas da documentação
A indexação seleciona e reorganiza dados de ndarray ao longo de eixos; a remodelação altera a forma sem mudar os valores quando o tamanho total permanece constante.
Cartão de receita de referência rápida - pronto para copiar e colar.
import numpy as np
matrix = np.arange(12).reshape(3, 4)
rows = matrix[1:3, ::2] # fatia linhas 1-2, cada outra coluna
cols = matrix[:, [0, 3]] # indexa avançadamente colunas 0 e 3
flat = matrix.reshape(-1) # view 1-D quando possívelQuando usar isso:
import numpy as np
# 4 regiões x 6 meses
sales = np.array(
[[10, 12, 11, 13, 14, 15],
[8, 9, 10, 9, 11, 12],
[20, 18, 19, 21, 22, 23],
[5, 6, 5, 7, 6, 8]],
dtype=np.int32,
)
# Apenas Q1: meses 0-2, todas as regiões
q1 = sales[:, 0:3]
# Duas principais regiões por vendas totais
totals = sales.sum(axis=1)
top_idx = np.argsort(totals)[-2:]
top_regions = sales[top_idx]
# Empilha vetores de região como colunas para correlação
wide = sales.T # shape (6, 4) - meses como linhas
# Marca meses em que qualquer região superou 20
hot_months = np.where(sales.max(axis=0) >= 20)[0]
print("q1 shape:", q1.shape)
print("top regions:", top_idx)
print("hot months:", hot_months)O que isso demonstra:
start:stop em axis=1axis=1 e depois argsort para seleção de linhas.T transpose como um atalho de remodelaçãonp.where em max(axis=0) para indexar colunas por condiçãostart:stop:step) usa strides para produzir uma view que compartilha memória.arr[mask] retorna uma seleção 1-D.reshape retorna uma view quando os strides permitem; caso contrário, ele copia.| Estilo | Exemplo | Cópia? |
|---|---|---|
| Fatia | a[2:5] | Geralmente view |
| Lista de inteiros | a[[1, 3]] | Cópia |
| Máscara booleana | a[a > 0] | Cópia |
np.take | np.take(a, idx, axis=0) | Configurável |
axis | Significado 2-D |
|---|---|
0 | Para baixo nas linhas (agrega colunas) |
1 | Através das colunas (agrega linhas) |
-1 | Última dimensão |
import numpy as np
# Insere eixo para broadcasting
row = np.array([1, 2, 3])
col = row[:, np.newaxis] # shape (3, 1)
# ravel vs flatten: flatten sempre copia
a = np.arange(6).reshape(2, 3)
flat_view = a.ravel()
flat_copy = a.flatten()a[[0, 1]] = 5 pode não se comportar como atribuição de fatia repetida. Correção: atribua a .copy() ou use np.put.a[::-1] pode fazer com que alguns reshape copiem inesperadamente. Correção: chame .copy() antes de extensões C downstream.a[mask] em 2-D precisa da forma da máscara (rows, cols) ou broadcastable. Correção: mask = mask & (a > 0) com formas alinhadas.a[1:3] exclui o índice 3; diferente de range. Correção: lembre-se que o stop é exclusivo.reshape(3, 5) em 12 elementos gera um erro. Correção: use -1 para uma dimensão inferida: reshape(3, -1).| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
np.einsum | Contrações explícitas de tensor | Seleções simples de linha/coluna |
pandas .loc | Linhas/colunas rotuladas | Kernels ndarray puramente numéricos |
np.take_along_axis | Ordenando valores por linha | Fatias de matriz inteira são suficientes |
np.moveaxis | Reordenando tensores 3-D+ | .T simples em 2-D |
import numpy as np
a = np.arange(10)
every_other = a[::2]matrix.T ou np.transpose(matrix) para 2-D.np.swapaxes(a, 0, 1) quando rank > 2.np.prod(shape) == a.size.np.resize apenas quando você intencionalmente deseja repetição ou truncamento.vol[z, y, x] - eixo mais lento primeiro em ordem C.a[5] em 2-D usa o índice ravel em ordem C.a[row, col] ou np.unravel_index para clareza.a[mask, :] mantém as colunas intactas.a[mask] sozinho sempre achata os elementos selecionados para 1-D.a[..., 0] seleciona o índice 0 no último eixo, todos os eixos anteriores completos.np.stack adiciona um novo eixo; np.concatenate junta ao longo de um eixo existente.np.vstack / hstack são wrappers de conveniência.x[i][j] indexa duas vezes e pode falhar em estruturas não quadradas..loc / .ilocVersões do Stack: 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: 16 de jul. de 2026