NumPy: Ordenação e Busca
Última atualização: 2026-08-26
1. O que Você Aprenderá
- ❶
np.sort— ordenação de arrays ao longo de qualquer eixo - ❷
np.argsort— obtenção dos índices que ordenariam o array - ❸
np.searchsorted— busca de posições de inserção em arrays ordenados - ❹
np.unique— encontrar elementos únicos - ❺
np.partition— ordenação parcial para top-k
2. Conceitos-Chave
(1) Ordenação
import numpy as np
a = np.array([3, 1, 4, 1, 5, 9, 2, 6])
print(np.sort(a)) # [1 1 2 3 4 5 6 9]
print(np.argsort(a)) # [1 3 0 6 2 4 7 5] (índices)
# Ordenação 2D
b = np.array([[3, 1, 4],
[1, 5, 9]])
print(np.sort(b, axis=0)) # ordenar cada coluna
print(np.sort(b, axis=1)) # ordenar cada linha
> **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.
(2) Busca
import numpy as np
a = np.array([1, 3, 5, 7, 9])
# Encontrar posições de inserção (o array deve estar ordenado)
print(np.searchsorted(a, 4)) # 2 (inserir entre 3 e 5)
print(np.searchsorted(a, [2, 6, 8])) # [1 3 4]
# Encontrar índices onde a condição é True
print(np.where(a > 4)) # (array([2, 3, 4]),)
> **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) Únicos
a = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3])
print(np.unique(a)) # [1 2 3 4 5 6 9]
# Com contagens
vals, counts = np.unique(a, return_counts=True)
print(vals) # [1 2 3 4 5 6 9]
print(counts) # [2 1 2 1 2 1 1]
> **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: Ordenando arrays (Dificuldade ⭐)
import numpy as np
a = np.array([3, 1, 4, 1, 5, 9, 2, 6])
# sort retorna uma cópia ordenada
sorted_a = np.sort(a)
print("Original:", a)
print("Ordenado:", sorted_a)
# Ordenação in-place
a.sort()
print("In-place:", a)
# Ordenação 2D por eixo
b = np.array([[3, 1, 4], [1, 5, 9]])
print("Ordenar colunas:\n", np.sort(b, axis=0))
print("Ordenar linhas:\n", np.sort(b, axis=1))
Output:
TEXT 📖 Somente leituraOriginal: [3 1 4 1 5 9 2 6] Ordenado: [1 1 2 3 4 5 6 9] In-place: [1 1 2 3 4 5 6 9] Ordenar colunas: [[1 1 4] [3 5 9]] Ordenar linhas: [[1 3 4] [1 5 9]]
▶ Exemplo: Usando argsort (Dificuldade ⭐⭐)
import numpy as np
scores = np.array([85, 92, 78, 95, 88])
names = np.array(['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'])
# Obter índices que ordenariam as pontuações
idx = np.argsort(scores)
print("Índices:", idx)
print("Pontuações ordenadas:", scores[idx])
# Ordenar nomes por pontuação (decrescente)
desc_idx = np.argsort(-scores)
print("Ranking:")
for rank, i in enumerate(desc_idx, 1):
print(f" {rank}. {names[i]}: {scores[i]}")
Output:
TEXT 📖 Somente leituraÍndices: [2 0 4 1 3] Pontuações ordenadas: [78 85 88 92 95] Ranking: 1. Diana: 95 2. Bob: 92 3. Eve: 88 4. Alice: 85 5. Charlie: 78
▶ Exemplo: Encontrando valores únicos com contagens (Dificuldade ⭐)
import numpy as np
grades = np.array(['A', 'B', 'A', 'C', 'B', 'A', 'B', 'B', 'C', 'A'])
unique, counts = np.unique(grades, return_counts=True)
print("Notas:", unique)
print("Contagens:", counts)
# Encontrar onde inserir valores em um array ordenado
sorted_arr = np.array([1, 3, 5, 7, 9])
pos = np.searchsorted(sorted_arr, [2, 4, 6, 8])
print("Posições de inserção:", pos)
Output:
TEXT 📖 Somente leituraNotas: ['A' 'B' 'C'] Contagens: [4 4 2] Posições de inserção: [1 2 3 4]
P:
np.sortmodifica o array original? R: Não — retorna uma cópia ordenada. Usea.sort()(método in-place) para ordenar o array original sem criar uma cópia.
P: Qual é a diferença entre
np.sortenp.argsort? R:np.sortretorna os valores ordenados.np.argsortretorna os índices que produziriam o array ordenado. Useargsortquando precisa ordenar múltiplos arrays pela mesma ordem.
P: O que é
np.partition? R: Ordena parcialmente o array de forma que o k-ésimo menor elemento está em sua posição final, com elementos menores antes e maiores depois (em ordem arbitrária). Mais rápido que ordenação completa para consultas top-k.
❓ 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
np.sort: retorna uma cópia ordenada;a.sort()ordena in-placenp.argsort: retorna índices para ordenação; útil para ordenar múltiplos arrays pela mesma ordemnp.searchsorted: encontra posições de inserção em arrays ordenados (busca binária, O(log n))np.unique: encontra elementos únicos com contagens opcionais, índices e inversonp.partition: ordenação parcial — mais rápida que ordenação completa para encontrar os k primeiros elementos
📝 Exercícios
-
Básico (Dificuldade ⭐): Crie um array de 20 inteiros aleatórios de 0 a 99. Ordene-o, encontre os índices que o ordenariam e encontre os valores únicos.
-
Intermediário (Dificuldade ⭐⭐): Crie dois arrays — nomes e pontuações. Use
np.argsortnas pontuações para ordenar ambos os arrays de forma que o nome com maior pontuação venha primeiro. -
Desafio (Dificuldade ⭐⭐⭐): Use
np.searchsortedpara mesclar dois arrays ordenados em um único array ordenado sem chamarnp.sort. Verifique se o resultado está corretamente ordenado.