Indexación avanzada y máscaras booleanas

Mapa conceptual
Indexación básica
Un array se indexa por posición como las listas: a[2] toma el tercer elemento; una multidimensional usa coma, m[0, 1]. Los rebanados (slices) con dos puntos devuelven vistas, no copias, así que un cambio en la vista afecta al original si no lo deseas.
Array booleano como máscara
Una comparación como a 0 no devuelve un sí o no, sino un array de booleanos del mismo tamaño. Al usar ese array para indexar, a[a 0], NumPy devuelve solo los elementos donde la condición era verdadera. Esto es el filtrado puro.
Combinar condiciones
- Usa operadores de bits y paréntesis: (a 0) y (a 10) para un intervalo.
- y es Y, es O, ~ es NO. Los símbolos and/or de Python no funcionan sobre arrays.
- Los paréntesis son obligatorios: la precedencia sin ellos rompe la expresión.
np.where
where(condicion, valor_si, valor_no) construye un nuevo array eligiendo elemento a elemento según la máscara, sin bucles. Es la versión vectorizada del «si esto, aquello, de lo contrario esto otro», perfecta para crear columnas derivadas.
Índices de posición (fancy indexing)
En lugar de una condición, pasas un array de enteros con las posiciones que quieres: a[[0, 2, 5]] toma esos tres elementos, en ese orden y permitiendo repetir índices. Sirve para reordenar o remuestrear.
| Modo | Sintaxis (idea) | Devuelve |
|---|---|---|
| Por posición | a[0], m[1, 2] | un elemento escalar |
| Rebanado | a[1:4] | una vista del segmento |
| Máscara booleana | a[a 0] | copia de los que cumplen |
| Fancy index | a[[0, 2, 5]] | copia en el orden dado |
¿Qué devuelve la expresión a[a 0] en un array NumPy?
Asignar con máscara
Las máscaras también escriben: a[a 0] = 0 pone a cero todos los negativos de golpe. Este patrón de «limpiar» valores inválidos es constantísimo al preparar datos antes de un análisis.
Contar y resumir con máscaras
Como los booleanos son 0 y 1 al sumarlos, a 0 seguido de .sum() cuenta cuántos cumplen la condición, y .mean() da la proporción. Sin bucles, obtienes la frecuencia de un evento sobre todo el array.
Cuentas de verdad
np.count_nonzero y np.any / np.all responden a preguntas como «¿hay algún valor ausente?» o «¿están todos ordenados?». Combinadas con máscaras cubren la mayoría de validaciones rápidas sobre un array.
Errores frecuentes
- Usar and/or en lugar de y sobre arrays: lanza un error de ambigüedad.
- Olvidar los paréntesis al combinar condiciones y obtener resultados inesperados.
- Esperar que un rebanado sea una copia y terminar modificando el original por accidente.
Para unir dos condiciones sobre arrays se emplean los operadores de Python and y or.
Del array al DataFrame
Este mismo mecanismo de filtrado es el que usarás en Pandas cada vez que escribas df[df.ventas 100]. Entender la máscara booleana sobre arrays te da la base de todo el filtrado de tablas.
Clasifica cada expresión:
Mascara
Fancy
Rebanado
Basica
NumPy Docs
Guía oficial de indexación, rebanado e indexación avanzada.
Dado un array de calificaciones, describe con máscaras cómo obtendrías: (1) solo los aprobados, (2) cuántos suspensos hay y (3) poner los negativos a cero. ¿Por qué evitas un bucle?
Documentacion pandas
Guia de referencia para manipulacion de datos en Python.