Programa
A medida que evoluciona la ciencia de los datos, son necesarios algunos cambios en las bibliotecas comunes, y esta vez, la biblioteca NumPy se actualiza a la versión 2.0. Esta gran actualización se publicó en junio de 2024, y aporta muchas nuevas funciones y mejoras a la popular biblioteca Python.
Con un salto tan grande en los cambios, es inevitable que haya algunas áreas a tener en cuenta que podrían requerir que ajustes tu código actual.
En este artículo, compartiremos una visión general de lo que incluye NumPy 2.0, los principales cambios realizados y cómo puedes migrar a NumPy 2.0.
Introducción a NumPy 2.0
Basado en años de comentarios y avances tecnológicos, NumPy 2.0 es una actualización ambiciosa, a diferencia de las muchas actualizaciones anteriores de los últimos años.
En su publicación del blogintrodujeron una API actualizada, reglas de promoción escalar mejoradas, una nueva API DType y un nuevo DType de cadena, mejoras de compatibilidad y alineación de los estándares de la API. Gracias a estos esfuerzos, los usuarios notarán mejoras significativas en el rendimiento y la documentación.
Sin embargo, con un cambio tan grande en la biblioteca, esta nueva versión viene acompañada de algunos trastornos. Por ejemplo, los nuevos cambios de API y ABI son incompatibles con los anteriores.
Principales novedades
Según las notas de la versiónNumPy 2.0 introduce cambios significativos, y aquí están los más notables:
Cambios en la API y la ABI
En esta actualización ha habido varios cambios de limpieza en la API y la ABI (Interfaz Binaria de Aplicación).
Con la nueva actualización, recogida en la NEP (NumPy Enhancement Proposal) 52, NumPy se desmarca de su postura habitual de tener compatibilidad con versiones anteriores para garantizar una API más racionalizada, limpia y sencilla.
He aquí algunos cambios notables:
- División de API públicas y privadas: Utilizando una estructura de módulos, la API NumPy para Python tiene ahora una clara división entre API pública y privada.
- Limpieza del espacio de nombres: Las funciones se han simplificado para facilitar el aprendizaje de NumPy. Ver la lista completa de eliminaciones para más información.
- Funcionalidad de nicho obsoleta: Se han eliminado muchas de las funciones y alias no recomendados.
- Nuevo tipo personalizado: Para la API C, se publicó una nueva API pública para crear DType personalizados.
Para los cambios ABI, habrá una ruptura con la nueva versión. Esto afectará a los binarios de los paquetes que utilicen la API NumPy C.
Cualquiera que lo construya con cualquier versión anterior de NumPy 1.xx no funcionará con NumPy 2.0. Compartiré más sobre cómo se pueden migrar las cosas según su recomendación. Te encontrarás con un mensaje ImportError, que indica incompatibilidad binaria.
Nueva API DType y DType String
Como se propone en NEP 41esta actualización 2.0 libera una nueva API para implementar tipos de datos personalizados definidos por el usuario mediante la función StringDType definido por el usuario. Esta nueva API incluye soporte nativo para tipos de datos de cadena de longitud variable, que los usuarios de NumPy llevaban tiempo solicitando.
Reglas de promoción escalar
Propuesto inicialmente en NEP 50las reglas de promoción escalar en NumPy también se han actualizado para evitar sorpresas al usuario. Antes, la promoción dependía a menudo de los valores de los datos de las matrices de entrada y no sólo de sus DTypes, lo que puede ser un comportamiento confuso.
Para ver las nuevas vías de promoción, consulta la imagen siguiente:
Fuente: NumPy DType precisión y promoción
Mejoras de rendimiento
Esta nueva versión también aporta algunas mejoras de rendimiento.
He aquí algunas áreas clave que se han mejorado:
- Funciones de clasificación más rápidas
- Mejoras en el rendimiento de las operaciones de álgebra lineal en macOS a través de macOS Accelerate
Compatibilidad con Windows
Para adaptarse mejor a los usuarios de Windows, el equipo de NumPy también ha solucionado varios problemas de compatibilidad con la nueva versión.
Por ejemplo, han cambiado el tipo de entero por defecto en Windows a int64
en lugar de int32
, para que coincida con el comportamiento por defecto en otras plataformas OS.
Documentación y usabilidad mejoradas
Se ha añadido más documentación a estructura de módulos de NumPyy se mejoró la navegación por la guía de referencia. La página construir a partir del código fuente también se ha reescrito por completo.
Cómo migrar a NumPy 2.0
Actualización a NumPy 2.0
En primer lugar, para empezar a utilizar esta nueva versión de NumPy, tendrás que actualizarla desde tu versión actual a la última.
Para ello, sólo tienes que utilizar la opción de actualización de este comando:
pip install -U numpy
También puedes utilizar esto:
pip install –upgrade numpy
Esta opción de actualización actualiza el paquete o paquetes especificados a la última versión, que en este caso es NumPy. Tras ejecutar el comando, deja que el sistema instale el paquete hasta que veas el mensaje "Se ha instalado correctamente numpy-2.0.0".
Si quieres actualizarte a una versión concreta en lugar de a la última versión, puedes utilizar este comando en su lugar:
pip install numpy==2.0.0
Así te aseguras de que la versión que estás instalando es la correcta, que en este caso es la 2.0.0.
Para hacer una segunda comprobación, ejecuta este comando:
pip list
Esto debería listar todos tus paquetes/bibliotecas instalados y sus respectivas versiones. Comprueba en la salida si las bibliotecas numpy
están actualizadas a la versión 2.0.0.
En el proceso de instalación, es posible que también aparezcan algunos mensajes de dependencia en rojo. Esto significa que hay algunos problemas potenciales con tu código después de actualizar a la última versión. A continuación, puedes examinar individualmente las áreas y bibliotecas concretas afectadas.
La actualización a NumPy 2.0 puede ser temporalmente perturbadora, por lo que es mejor asegurarse de que todo está bien migrado en tus scripts y futuros pipelines.
Para obtener una guía completa, consulta la Guía de migración a NumPy 2.0 publicada por los desarrolladores.
Éstas son las áreas clave que hay que tener en cuenta al migrar:
Cómo abordar los cambios en la promoción de tipos de datos de NumPy
Para obtener una guía completa sobre los diversos comportamientos de cambio y los cambios previstos en los tipos de datos, consulta esta tabla en NEP 50.
El principal problema de retrocompatibilidad es la precisión de tus escalares.
Por ejemplo, cuando se ejecuta una operación como ésta:
np.float32(6) + 6.
Esto devuelve un tipo de datos float32 en lugar de float64, lo que dificulta la compatibilidad con versiones anteriores. Para solucionar este problema, esto es lo que recomiendan:
Convierte los tipos de datos explícitamente: Utiliza los escalares int()
, float()
, o numpy_scalar.item()
para especificar explícitamente tu tipo de datos.
Activa las advertencias para rastrear los cambios: Utiliza las advertencias como una forma de buscar cambios a través de las trazas de error.
Abordar los cambios en el espacio de nombres
Con esta actualización 2.0, las numerosas supresiones de espacios de nombres pueden afectar a tu código. El equipo de NumPy sugiere estos pasos:
- Comprueba alias obsoletos y directrices de migración aquí.
- Sustituye los alias obsoletos por una alternativa compatible con versiones anteriores.
- Comprueba si hay miembros privados que se hayan eliminado en la actualización 2.0.
- Utiliza la API existente si se utilizaron miembros privados.
Abordar la rotura ABI
Si utilizas un paquete de Python que depende de la API C de NumPy, tendrás que solucionar cualquier interrupción en la ABI. Los desarrolladores han publicado algunos consejos específicos para NumPy 2.0 para estas situaciones con el fin de solucionar la incompatibilidad:
Plugin Ruff para actualizar código Python
Para ayudarte en el proceso de migración, puedes utilizar el plugin plugin Ruff con una aplicación Ruff dedicado, NPY201.
Ruff está disponible como ruff en PyPI. Para instalar Ruff, introduce esto en la línea de comandos:
pip install ruff
Para más detalles, consulta la guía completa de instalación de Ruff.
Asegúrate de especificar la regla NP201
a tu pyproject.toml
:
[tool.ruff.lint]
select = ["NPY201"]
También puedes especificar la regla NPY201 utilizando la línea de comandos:
$ ruff check path/to/code/ --select NPY201
Contribuciones comunitarias
El lanzamiento de NumPy 2.0 es la culminación de los esfuerzos de su comunidad. A través de los numerosos NEP sugeridos por la comunidad, por fin se han puesto en práctica muchas de las propuestas largamente esperadas.
Desarrolladores entusiastas, investigadores y entusiastas han desempeñado un papel fundamental en esta innovadora versión, compartiendo su experiencia, proporcionando comentarios y enviando mejoras de código que han dado una forma significativa a NumPy 2.0.
Conclusión
NumPy 2.0 es un gran paso adelante para el lenguaje de programación Python, con sus muchas nuevas funciones y mejoras de rendimiento, compatibilidad y facilidad de uso. Si tienes algún problema con la migración o algún tipo de error, lo mejor es que te dirijas directamente al equipo de NumPy.
Espero que este artículo te haya sido útil para comprender los principales cambios de esta apasionante actualización de NumPy. Para una lectura más profunda, lee nuestro Tutorial de NumPy.
Si eres nuevo en NumPy y te gustaría explorar más, prueba nuestro curso Curso de introducción a NumPy o echa un vistazo a este formación de código NumPy en directo.