NumPy - Wikipedia

¿Te gustaría aprender Ciencia de Datos con Python?
Tenemos los cursos que necesitas. ¡Haz clic aquí!

La programación de matrices proporciona una sintaxis potente, compacta y expresiva para acceder, manipular y operar datos en vectores, matrices y matrices de mayor dimensión. NumPy es la biblioteca de programación de matrices principal para el lenguaje Python. Tiene un papel esencial en los procesos de análisis de investigación en campos tan diversos como la física, la química, la astronomía, la geociencia, la biología, la psicología, la ciencia de los materiales, la ingeniería, las finanzas y la economía. Por ejemplo, en astronomía, NumPy fue una parte importante de la pila de software utilizada en el descubrimiento de ondas gravitacionales y en la primera imagen de un agujero negro.

 Aquí revisamos cómo algunos conceptos fundamentales de arreglos conducen a un paradigma de programación simple y poderoso para organizar, explorar y analizar datos científicos. NumPy es la base sobre la que se construye el ecosistema científico de Python. Es tan omnipresente que varios proyectos, dirigidos a públicos con necesidades especializadas, han desarrollado sus propias interfaces y objetos de matriz similares a NumPy. 

Debido a su posición central en el ecosistema, NumPy actúa cada vez más como una capa de interoperabilidad entre tales bibliotecas de cómputo de arreglos y, junto con su interfaz de programación de aplicaciones (API), proporciona un marco flexible para respaldar la próxima década de análisis científico e industrial.

Python 3 para impacientes: Comparar arrays en Numpy

Principal

Existían dos paquetes de matriz de Python antes de NumPy. El paquete Numeric se desarrolló a mediados de la década de 1990 y proporcionaba objetos de matriz y funciones de reconocimiento de matrices en Python. Fue escrito en C y vinculado a implementaciones rápidas estándar de álgebra lineal. Uno de sus primeros usos fue dirigir aplicaciones C ++ para la investigación de fusión por confinamiento inercial en el Laboratorio Nacional Lawrence Livermore.

 Para manejar grandes imágenes astronómicas provenientes del Telescopio Espacial Hubble, una reimplementación de Numeric, llamada Numarray, agregó soporte para matrices estructuradas, indexación flexible, mapeo de memoria, variantes de orden de bytes, uso de memoria más eficiente, manejo flexible de errores estándar IEEE 754 capacidades y mejores reglas de conversión de tipos.

 Aunque Numarray era altamente compatible con Numeric, los dos paquetes tenían suficientes diferencias que dividieron a la comunidad; sin embargo, en 2005 NumPy surgió como una unificación lo mejor de ambos mundos combinando las características de Numarray con el rendimiento de matriz pequeña de Numeric y su rica API C.

Ahora, 15 años después, NumPy sustenta casi todas las bibliotecas de Python que realizan cálculos científicos o numéricos, incluidos SciPy, Matplotlib, pandas, scikit-learn y scikit-image. NumPy es una biblioteca de código abierto desarrollada por la comunidad, que proporciona un objeto de matriz de Python multidimensional junto con funciones conscientes de la matriz que operan en él. Debido a su simplicidad inherente, la matriz NumPy es el formato de intercambio de facto para datos de matriz en Python.

NumPy opera en matrices en memoria utilizando la unidad central de procesamiento (CPU). Para utilizar almacenamiento y hardware moderno y especializado, ha habido una proliferación reciente de paquetes de arreglos de Python. A diferencia de la división Numarray-Numérica, ahora es mucho más difícil para estas nuevas bibliotecas fracturar la comunidad de usuarios, dada la cantidad de trabajo que ya se ha construido sobre NumPy. 

Sin embargo, para proporcionar a la comunidad acceso a tecnologías nuevas y exploratorias, NumPy está pasando a un mecanismo de coordinación central que especifica una API de programación de matrices bien definida y la envía, según corresponda, a implementaciones de matrices especializadas.

Matrices NumPy

La matriz NumPy es una estructura de datos que almacena y accede de manera eficiente a matrices multidimensionales (también conocidas como tensores) y permite una amplia variedad de cálculos científicos. Consiste en un puntero a la memoria, junto con los metadatos utilizados para interpretar los datos almacenados allí, en particular, ‘tipo de datos’, ‘forma’ y ‘pasos’.

Figura 1

El tipo de datos describe la naturaleza de los elementos almacenados en una matriz. Una matriz tiene un solo tipo de datos y cada elemento de una matriz ocupa el mismo número de bytes en la memoria. Los ejemplos de tipos de datos incluyen números reales y complejos (de menor y mayor precisión), cadenas, marcas de tiempo y punteros a objetos de Python.

La forma de una matriz determina el número de elementos a lo largo de cada eje, y la cantidad de ejes es la dimensionalidad de la matriz. Por ejemplo, un vector de números se puede almacenar como una matriz unidimensional de forma N , mientras que los videos en color son matrices de formas tetradimensionales ( T ,  M ,  N , 3).

Los pasos son necesarios para interpretar la memoria de la computadora, que almacena elementos linealmente, como matrices multidimensionales. Describen la cantidad de bytes para avanzar en la memoria para saltar de una fila a otra, de una columna a otra, y así sucesivamente. Considere, por ejemplo, una matriz bidimensional de números de punto flotante con forma (4, 3), donde cada elemento ocupa 8 bytes en la memoria. Para movernos entre columnas consecutivas, necesitamos avanzar 8 bytes en la memoria y acceder a la siguiente fila, 3 × 8 = 24 bytes. Por lo tanto, los pasos de esa matriz son (24, 8). NumPy puede almacenar matrices en orden de memoria C o Fortran, iterando primero sobre filas o columnas. Esto permite que las bibliotecas externas escritas en esos lenguajes accedan directamente a los datos de la matriz NumPy en la memoria.

NumPy: Funciones basicas de algebra - ▷ Cursos de Programación de 0 a  Experto © Garantizados

Los usuarios interactúan con matrices NumPy usando ‘indexación’ (para acceder a subarreglos o elementos individuales), ‘operadores’ (por ejemplo, +, – y × para operaciones vectorizadas y @ para multiplicación de matrices), así como ‘funciones conscientes de matrices’; En conjunto, estos proporcionan una API de alto nivel, expresiva y fácilmente legible para la programación de arreglos, mientras que NumPy se ocupa de la mecánica subyacente para acelerar las operaciones.

La indexación de una matriz devuelve elementos individuales, submatrices o elementos que satisfacen una condición específica. Las matrices incluso se pueden indexar utilizando otras matrices. Siempre que sea posible, la indexación que recupera un subarreglo devuelve una ‘vista’ en el arreglo original de modo que los datos se comparten entre los dos arreglos. Esto proporciona una forma poderosa de operar en subconjuntos de datos de matriz al tiempo que limita el uso de memoria.

Para complementar la sintaxis del arreglo, NumPy incluye funciones que realizan cálculos vectorizados en arreglos, incluyendo aritmética, estadística y trigonometría. La vectorización, que opera en arreglos completos en lugar de sus elementos individuales, es esencial para la programación de arreglos. 

Esto significa que las operaciones que requerirían muchas decenas de líneas para expresarse en lenguajes como C, a menudo se pueden implementar como una única expresión clara de Python. Esto da como resultado un código conciso y libera a los usuarios para que se concentren en los detalles de su análisis, mientras que NumPy maneja los bucles sobre los elementos de la matriz de manera casi óptima, por ejemplo, teniendo en cuenta los avances para utilizar mejor la memoria caché rápida de la computadora.

Al realizar una operación vectorizada (como una suma) en dos matrices con la misma forma, está claro lo que debería suceder. A través de la ‘transmisión’, NumPy permite que las dimensiones difieran y produce resultados que apelan a la intuición. Un ejemplo trivial es la adición de un valor escalar a una matriz, pero la transmisión también se generaliza a ejemplos más complejos, como escalar cada columna de una matriz o generar una cuadrícula de coordenadas. En la radiodifusión, una o ambas matrices se duplican virtualmente (es decir, sin copiar ningún dato en la memoria), de modo que las formas de los operandos coincidan. La radiodifusión también se aplica cuando una matriz se indexa utilizando matrices de índices.

Otras funciones con reconocimiento de matrices, como suma, media y máxima, realizan «reducciones» elemento por elemento, agregando resultados en uno, varios o todos los ejes de una sola matriz. Por ejemplo, la suma de una matriz n- dimensional sobre d ejes da como resultado una matriz de dimensión n  –  d.

NumPy también incluye funciones de reconocimiento de matrices para crear, remodelar, concatenar y rellenar matrices; buscar, clasificar y contar datos; y lectura y escritura de archivos. Proporciona un amplio soporte para generar números pseudoaleatorios, incluye una variedad de distribuciones de probabilidad y realiza álgebra lineal acelerada, utilizando uno de varios backends como OpenBLAS o Intel MKL optimizados para las CPU en cuestión (consulte Métodos complementarios para obtener más detalles). .

En conjunto, la combinación de una simple representación de matriz en memoria, una sintaxis que imita de cerca las matemáticas y una variedad de funciones de utilidad con reconocimiento de matriz forma un lenguaje de programación de matriz productivo y poderosamente expresivo.

Python NumPy Guide - Learn NumPy Arrays With Examples | by Aayushi Johari |  Edureka | Medium

Ecosistema científico de Python

Python es un lenguaje de programación interpretado de código abierto y de propósito general muy adecuado para tareas de programación estándar como limpiar datos, interactuar con recursos web y analizar texto. La adición de operaciones de matriz rápida y álgebra lineal permite a los científicos hacer todo su trabajo dentro de un único lenguaje de programación, uno que tiene la ventaja de ser muy fácil de aprender y enseñar, como lo demuestra su adopción como lenguaje de aprendizaje principal en muchas universidades.

Aunque NumPy no es parte de la biblioteca estándar de Python, se beneficia de una buena relación con los desarrolladores de Python. A lo largo de los años, el lenguaje Python ha agregado nuevas características y una sintaxis especial para que NumPy tenga una notación de matriz más concisa y fácil de leer. Sin embargo, debido a que no es parte de la biblioteca estándar, NumPy puede dictar sus propias políticas de lanzamiento y patrones de desarrollo.

SciPy y Matplotlib están estrechamente relacionados con NumPy en términos de historia, desarrollo y uso. SciPy proporciona algoritmos fundamentales para la computación científica, incluidas rutinas matemáticas, científicas y de ingeniería. Matplotlib genera figuras y visualizaciones listas para publicación. La combinación de NumPy, SciPy y Matplotlib, junto con un entorno interactivo avanzado como IPython o Jupyter, proporciona una base sólida para la programación de matrices en Python. El ecosistema científico de Python se basa en esta base para proporcionar varias bibliotecas específicas de técnicas ampliamente utilizadas, que a su vez subyacen a numerosos proyectos específicos de dominio. NumPy, en la base del ecosistema de bibliotecas con reconocimiento de matrices, establece estándares de documentación, proporciona infraestructura de prueba de matrices y agrega soporte de compilación para Fortran y otros compiladores.

Figura 2

Muchos grupos de investigación han diseñado bibliotecas científicas grandes y complejas que agregan funcionalidad específica de la aplicación al ecosistema. Por ejemplo, la biblioteca de imágenes eht, desarrollado por la colaboración de Event Horizon Telescope para imágenes, análisis y simulación de radiointerferometría, se basa en muchos componentes de nivel inferior del ecosistema científico de Python. En particular, la colaboración de EHT utilizó esta biblioteca para la primera imagen de un agujero negro. 

Dentro de las imágenes eht, las matrices NumPy se utilizan para almacenar y manipular datos numéricos en cada paso de la cadena de procesamiento: desde los datos sin procesar hasta la calibración y la reconstrucción de imágenes. SciPy proporciona herramientas para tareas generales de procesamiento de imágenes, como filtrado y alineación de imágenes, y scikit-image, una biblioteca de procesamiento de imágenes que amplía SciPy, proporciona una funcionalidad de nivel superior, como filtros de borde y transformaciones de Hough. 

El módulo ‘scipy.optimize’ realiza una optimización matemática. NetworkX, un paquete para análisis de redes complejos, se utiliza para verificar la coherencia de la comparación de imágenes. Astropy maneja formatos de archivo astronómicos estándar y calcula transformaciones de coordenadas de tiempo. Matplotlib se utiliza para visualizar datos y generar la imagen final del agujero negro.

El entorno interactivo creado por la base de programación de matrices y el ecosistema de herramientas circundante, dentro de IPython o Jupyter, es ideal para el análisis de datos exploratorios. Los usuarios pueden inspeccionar, manipular y visualizar sus datos de forma fluida e iterar rápidamente para refinar las declaraciones de programación. 

Estas declaraciones luego se unen en programas imperativos o funcionales, o cuadernos que contienen tanto computación como narrativa. La informática científica más allá del trabajo exploratorio a menudo se realiza en un editor de texto o en un entorno de desarrollo integrado (IDE) como Spyder. Este entorno rico y productivo ha hecho que Python sea popular para la investigación científica.

Para complementar esta instalación para el trabajo exploratorio y la creación rápida de prototipos, NumPy ha desarrollado una cultura de uso de prácticas de ingeniería de software probadas en el tiempo para mejorar la colaboración y reducir el error. Esta cultura no solo es adoptada por los líderes del proyecto, sino que también se enseña con entusiasmo a los recién llegados. El equipo de NumPy adoptó pronto el control de revisión distribuido y la revisión del código para mejorar la colaboración en el código, y las pruebas continuas que ejecutan una amplia batería de pruebas automatizadas para cada cambio propuesto en NumPy. El proyecto también cuenta con documentación completa y de alta calidad, integrada con el código fuente.

Fluent NumPy. Let's uncover the practical details of… | by Munish Goyal |  Analytics Vidhya | Medium

Esta cultura de utilizar las mejores prácticas para producir software científico confiable ha sido adoptada por el ecosistema de bibliotecas que se basan en NumPy. Por ejemplo, en un premio reciente otorgado por la Royal Astronomical Society a Astropy, afirman: “El Proyecto Astropy ha proporcionado a cientos de científicos jóvenes experiencia en prácticas de desarrollo de software estándar profesional, incluido el uso de control de versiones, pruebas unitarias, revisión de código y procedimientos de seguimiento de problemas. 

Este es un conjunto de habilidades vitales para los investigadores modernos que a menudo falta en la educación universitaria formal en física o astronomía ”. Los miembros de la comunidad trabajan explícitamente para abordar esta falta de educación formal a través de cursos y talleres.

El rápido crecimiento reciente de la ciencia de datos, el aprendizaje automático y la inteligencia artificial ha impulsado aún más y drásticamente el uso científico de Python. Actualmente existen ejemplos de sus aplicaciones importantes, como la biblioteca de imágenes eht, en casi todas las disciplinas de las ciencias naturales y sociales. 

Estas herramientas se han convertido en el entorno de software principal en muchos campos. NumPy y su ecosistema se enseñan comúnmente en cursos universitarios, campamentos de entrenamiento y escuelas de verano, y son el foco de conferencias y talleres comunitarios en todo el mundo. NumPy y su API se han vuelto realmente ubicuos.

Te esperamos en los siguientes artículos en donde hablaremos más acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.

¿Te gustaría aprender Ciencia de Datos con Python?
Tenemos los cursos que necesitas. ¡Haz clic aquí!

About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax