NumPy: Ordenação e Busca

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

1. O que Você Aprenderá



2. Conceitos-Chave

(1) Ordenação

PYTHON
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
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.

(2) Busca

PYTHON
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]),)
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) Únicos

PYTHON
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]
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: Ordenando arrays (Dificuldade ⭐)

PYTHON
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 leitura
Original: [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 ⭐⭐)

PYTHON
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 ⭐)

PYTHON
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 leitura
Notas: ['A' 'B' 'C']
Contagens: [4 4 2]
Posições de inserção: [1 2 3 4]

P: np.sort modifica o array original? R: Não — retorna uma cópia ordenada. Use a.sort() (método in-place) para ordenar o array original sem criar uma cópia.

P: Qual é a diferença entre np.sort e np.argsort? R: np.sort retorna os valores ordenados. np.argsort retorna os índices que produziriam o array ordenado. Use argsort quando 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



📝 Exercícios

  1. 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.

  2. Intermediário (Dificuldade ⭐⭐): Crie dois arrays — nomes e pontuações. Use np.argsort nas pontuações para ordenar ambos os arrays de forma que o nome com maior pontuação venha primeiro.

  3. Desafio (Dificuldade ⭐⭐⭐): Use np.searchsorted para mesclar dois arrays ordenados em um único array ordenado sem chamar np.sort. Verifique se o resultado está corretamente ordenado.

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%