Boost Academy
FormaciónEvaluacionesPerfil
Volver
  • En directo

Numpy — Avanzado

8h de clase en directo·HACK A BOSS·Español

Skills que aprenderás

  • numpy

Convocatorias

Necesitas un plan activo

Para acceder a los cursos en directo necesitas un plan activo. Estamos trabajando para que los planes estén disponibles pronto — ¡mantente atento!

No hay convocatorias abiertas ahora mismo, pero no te pierdas la oportunidad: guarda este curso y te avisamos en cuanto se abra una convocatoria.

Descripción

Objetivos

Temario

Requisitos técnicos

Conocimientos previos

Detalles de la convocatoria

Recursos

No hay recursos disponibles todavía para esta convocatoria

Este curso está dirigido a profesionales y científicos de datos que ya dominan los fundamentos e intermedios de NumPy y necesitan llevar su dominio de la librería al nivel productivo y de alto rendimiento. A lo largo de ocho horas, el participante explorará las mecánicas internas de NumPy —gestión de memoria, vistas frente a copias, strides y acceso a disco con memmap— y aprenderá a diseñar soluciones vectorizadas, ufuncs personalizadas y pipelines de álgebra lineal numéricamente estables. Al finalizar, el participante será capaz de construir módulos reutilizables de análisis multidimensional, diagnosticar cuellos de botella de rendimiento con evidencia medible y garantizar la interoperabilidad sin fricciones con el ecosistema científico de Python, todo ello aplicado a datasets de escala real.

Al finalizar el curso, el participante será capaz de:

  1. Explicar el modelo interno de memoria de NumPy —incluyendo el mecanismo de vistas, copias y strides— y justificar las decisiones de diseño en función del tamaño del dataset y el riesgo de mutación involuntaria.
  2. Diseñar funciones que apliquen broadcasting sobre tensores de tres o más dimensiones, anticipando y documentando los casos de formas incompatibles antes de ejecutar el código.
  3. Optimizar pipelines de transformación numérica sustituyendo bucles Python por operaciones vectorizadas, midiendo la ganancia de rendimiento con %timeit y demostrando una reducción de tiempo de ejecución de al menos 5×.
  4. Automatizar el cálculo de estadísticos descriptivos multidimensionales (media, desviación estándar, percentiles, curtosis) sobre ejes arbitrarios, encapsulando la lógica en un módulo reutilizable con interfaz configurable.
  5. Evaluar el rendimiento y la estabilidad numérica de descomposiciones matriciales (SVD, QR, Cholesky) aplicadas a matrices mal condicionadas, seleccionando la más adecuada para cada contexto.
  6. Construir ufuncs personalizadas compatibles con broadcasting nativo y verificar su rendimiento frente a implementaciones equivalentes en Python puro.
  7. Garantizar la interoperabilidad de NumPy con al menos dos librerías del ecosistema científico (pandas, scikit-learn o PyTorch), implementando las conversiones necesarias sin copias innecesarias de datos.

Bloque 1 — Memoria, vistas y acceso eficiente a datos de gran escala Se revisa en profundidad el modelo de memoria de NumPy: cómo se representan los arrays mediante buffers contiguos, qué son los strides y cómo determinan el acceso a cada elemento. El participante aprende a distinguir con precisión cuándo una operación genera una vista y cuándo produce una copia, y a elegir entre ambas estrategias en función del tamaño del dataset y la posibilidad de mutación no deseada. A continuación se introduce np.memmap como mecanismo para procesar ficheros de gran escala sin cargarlos completamente en RAM, definiendo umbrales de consumo de memoria y verificándolos durante la ejecución.

Bloque 2 — Vectorización avanzada y broadcasting multidimensional El bloque parte de la vectorización como filosofía de diseño: se identifican los patrones de bucle más frecuentes y se reescriben como operaciones NumPy equivalentes, documentando la mejora con %timeit. Sobre esa base se aborda el broadcasting sobre tensores de tres o más dimensiones: reglas de compatibilidad de formas, técnicas de reshaping previo y documentación preventiva de casos conflictivos antes de ejecutar el código. El bloque culmina con el diseño e implementación de ufuncs personalizadas que extienden este modelo a operaciones elemento a elemento definidas por el usuario, garantizando compatibilidad nativa con broadcasting y midiendo su rendimiento frente a la solución en Python puro.

Bloque 3 — Estadística multidimensional y álgebra lineal numérica Se construye un módulo de estadísticos descriptivos multidimensionales —media, desviación estándar, percentiles y curtosis— que opera sobre ejes arbitrarios y expone una interfaz configurable y reutilizable. Después, el participante trabaja con las principales descomposiciones matriciales de numpy.linalg: SVD, QR y Cholesky. Se analizan sus propiedades de estabilidad numérica frente a matrices mal condicionadas, se mide el error de reconstrucción y se establece un criterio de selección justificado según el contexto del problema.

Bloque 4 — Interoperabilidad con el ecosistema científico El curso cierra integrando NumPy con el resto del ecosistema de Python para ciencia de datos. Se estudian los protocolos de conversión entre arrays de NumPy y las estructuras nativas de pandas, scikit-learn y PyTorch, haciendo especial énfasis en evitar copias innecesarias mediante el uso de __array__, DLPack y vistas compartidas. El participante implementa un flujo extremo a extremo que cruza al menos dos librerías, diagnostica los puntos de copia con herramientas de perfilado y aplica las conversiones óptimas para preservar la eficiencia obtenida en los bloques anteriores.

  • Python 3.10 o superior.
  • NumPy ≥ 1.26.
  • Jupyter Lab o Jupyter Notebook (versión estable reciente) para ejecutar los ejercicios cronometrados con %timeit.
  • pandas ≥ 2.0, scikit-learn ≥ 1.4 y PyTorch ≥ 2.2 instalados en el entorno (al menos dos de los tres son obligatorios para el Bloque 4).
  • Acceso a un sistema de ficheros local con al menos 2 GB libres para los ejercicios de np.memmap.
  • Se recomienda un entorno con al menos 8 GB de RAM para poder apreciar las diferencias de consumo entre estrategias de acceso a datos.
  • Manejo fluido de indexación avanzada, fancy indexing y slicing en NumPy (nivel intermedio consolidado).
  • Uso habitual de np.linalg para operaciones básicas de álgebra lineal (producto matricial, inversión, normas).
  • Comprensión de los dtypes de NumPy y su impacto en precisión numérica y consumo de memoria.
  • Experiencia práctica con al menos una librería del ecosistema científico de Python (pandas, scikit-learn o similar).
  • Capacidad de perfilar código Python con %timeit o cProfile e interpretar los resultados.