Indexação Avançada
O fatiamento básico funciona bem para regiões contíguas, mas às vezes você precisa de seleções mais complexas. O NumPy oferece duas técnicas poderosas de indexação avançada:
Indexação com Array de Inteiros
Selecione elementos arbitrários fornecendo um array de índices. É como escolher itens específicos de uma lista usando suas posições.
Exemplo prático: Você tem notas de testes e quer verificar as notas dos alunos nas posições 3, 7 e 12:
scores = np.array([85, 92, 78, 95, 88, 76, 91, 89, 84, 93, 87, 90, 82])
student_positions = [3, 7, 12] ## Alunos de interesse
selected_scores = scores[student_positions] ## [95, 89, 82]
Indexação com Array Booleano (Mascaramento)
Selecione elementos com base em condições. Crie uma "máscara" de valores True/False e, em seguida, use-a para filtrar o array.
Exemplo prático: Filtre as notas de aprovação (≥ 80) de uma turma:
scores = np.array([85, 92, 78, 95, 88, 76, 91, 89, 84, 93])
passing_mask = scores >= 80 ## [True, True, False, True, True, False, True, True, True, True]
passing_scores = scores[passing_mask] ## [85, 92, 95, 88, 91, 89, 84, 93]
Por Que Isso Importa
- Indexação com inteiros: Perfeita para amostrar pontos de dados específicos
- Indexação booleana: Ideal para filtragem de dados e seleções condicionais
- Ambas criam cópias (não views), portanto, modificações não afetam o array original
Vamos tentar ambas. Substitua o conteúdo de indexing_practice.py pelo seguinte código:
import numpy as np
## --- Integer Array Indexing ---
x = np.arange(10, 0, -1)
print("Array for integer indexing:", x)
## Select elements at indices 3, 3, 1, and 8
selected_elements = x[np.array([3, 3, 1, 8])]
print("Selected elements with integer array:", selected_elements)
## --- Boolean Array Indexing ---
y = np.array([1., -1., -2., 3.])
print("\nArray for boolean indexing:", y)
## Create a boolean mask for negative elements
mask = y < 0
print("Boolean mask (y < 0):", mask)
## Select elements where the condition is True
negative_elements = y[mask]
print("Elements where y < 0:", negative_elements)
Salve o arquivo e execute o script:
python indexing_practice.py
Sua saída deverá demonstrar como a indexação com inteiros e a indexação booleana funcionam para selecionar dados específicos de seus arrays.
Array for integer indexing: [10 9 8 7 6 5 4 3 2 1]
Selected elements with integer array: [7 7 9 2]
Array for boolean indexing: [ 1. -1. -2. 3.]
Boolean mask (y < 0): [False True True False]
Elements where y < 0: [-1. -2.]