Indexación Avanzada
El slicing básico funciona bien para regiones contiguas, pero a veces necesitas selecciones más complejas. NumPy proporciona dos potentes técnicas de indexado avanzado:
Indexado con Arrays de Enteros (Integer Array Indexing)
Selecciona elementos arbitrarios proporcionando un array de índices. Es como elegir elementos específicos de una lista usando sus posiciones.
Ejemplo del mundo real: Tienes puntuaciones de exámenes y quieres verificar las puntuaciones de los estudiantes en las posiciones 3, 7 y 12:
scores = np.array([85, 92, 78, 95, 88, 76, 91, 89, 84, 93, 87, 90, 82])
student_positions = [3, 7, 12] ## Estudiantes que te interesan
selected_scores = scores[student_positions] ## [95, 89, 82]
Indexado con Arrays Booleanos (Boolean Array Indexing / Masking)
Selecciona elementos basándose en condiciones. Crea una "máscara" de valores True/False, luego úsala para filtrar el array.
Ejemplo del mundo real: Filtra las notas aprobatorias (≥ 80) de una clase:
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 Qué Esto es Importante
- Indexado con enteros: Perfecto para muestrear puntos de datos específicos
- Indexado booleano: Ideal para filtrar datos y selecciones condicionales
- Ambos crean copias (no vistas), por lo que las modificaciones no afectan al array original
Probemos ambos. Reemplaza el contenido de indexing_practice.py con el siguiente 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)
Guarda el archivo y ejecuta el script:
python indexing_practice.py
Tu salida debería demostrar cómo funcionan tanto el indexado con enteros como el booleano para seleccionar datos específicos de tus 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.]