NumPy es, al igual que Pandas, Matplotlib o Scikit-Learn, uno de los paquetes que no puedes perderte cuando estás aprendiendo Machine Learning, principalmente porque esta librería proporciona una estructura de datos de matriz que tiene algunos beneficios sobre las listas regulares de Python. Algunos de estos beneficios son: ser más compacto, acceder más rápido a leer y escribir artículos, ser más conveniente y más eficiente.
Definición
NumPy es un módulo de Python. El nombre es un acrónimo de Python Numérico. Es una librería que consiste en objetos de matrices multidimensionales y una colección de rutinas para procesar esas matrices.
Es un módulo de extensión para Python, escrito en su mayor parte en C. Esto asegura que las funciones y funcionalidades matemáticas y numéricas precompiladas de NumPy garantizan una gran velocidad de ejecución.
NumPy es un paquete de procesamiento de matrices de uso general. Proporciona un objeto de matriz multidimensional de alto rendimiento, y herramientas para trabajar con estas matrices. Es el paquete fundamental para la computación científica con Python. Además de sus obvios usos científicos, NumPy también puede ser usado como un eficiente contenedor multidimensional de datos genéricos.
NumPy enriquece el lenguaje de programación Python con potentes estructuras de datos, implementando matrices y arreglos multidimensionales. Estas estructuras de datos garantizan cálculos eficientes con matrices. La implementación apunta incluso a matrices enormes, mejor conocidas bajo el título de “grandes datos”. Además, el módulo suministra funciones matemáticas de alto nivel para operar en estas matrices.
NumPy no forma parte de una instalación básica de Python. Tiene que ser instalados después de la instalación de Python.
NumPy se basa en dos módulos anteriores de Python que trataban matrices. Uno de ellos es Numeric, este es como NumPy, un módulo de Python para computación numérica de alto rendimiento, pero es obsoleto hoy en día. Otro predecesor de NumPy es Numarray, que es una reescritura completa de Numeric pero también está obsoleto. NumPy es una fusión de esos dos, se basa en el código de Numeric y las características de Numarray.
En resumen, porque utilizar NumPy en nuestros proyectos:
- NumPy es una librería numérica de Python de código abierto.
- NumPy contiene una matriz multidimensional y estructuras de datos matriciales.
- Se puede utilizar para realizar una serie de operaciones matemáticas en matrices como rutinas trigonométricas, estadísticas y algebraicas. Por lo tanto, la librería contiene un gran número de funciones matemáticas, algebraicas y de transformación.
- NumPy es una extensión de Numeric y Numarray.
- NumPy también contiene generadores de números aleatorios.
- NumPy es una envoltura alrededor de una librería implementada en C.
- Los objetos de Pandas (otra librería de Python) dependen en gran medida de los objetos de NumPy. Esencialmente, Pandas extiende NumPy.
Array de NumPy
Los array o matrices de NumPy son un poco como las listas de Python, pero al mismo tiempo muy diferentes. Un array de NumPy es una estructura de datos central de la librería NumPy.
El array de NumPy es un poderoso objeto de matriz n-dimensional que tiene forma de filas y columnas. Podemos iniciar las matrices NumPy desde listas de Python anidadas y acceder a sus elementos.
Tipos de arrays importantes en NumPy
Empecemos por comprender los tipos de datos de NumPy más importantes. Uno de los objetos más importantes es un tipo de array n-dimensional conocida como ndarray, pero expliquemos cada uno de estos objetos en NumPy.
Array unidimensional
Podemos pensar en una matriz unidimensional como una columna o una fila de una tabla con uno o más elementos.
Todos los elementos que se almacenan en el array deben ser del mismo tipo. Esto implica que el array es un bloque de datos homogéneos.
Para crear un array unidimensional solamente tienes que escribir:
import numpy as np
a = np.array((1,2,3))
print(a)
Array multidimensional
Un array multidimensional tiene más de una columna. Podemos considerar un arreglo multidimensional como una hoja de cálculo de Excel, tiene columnas y filas. Cada columna puede ser considerada como una dimensión.
Para crear un array multidimensional solamente tienes que escribir:
import numpy as np
a = np.array([[1,2], [10,20]])
print(a)
Crear arrays en NumPy
Como vimos anteriormente para utilizar NumPy, primero debemos importarla para esto utilizamos la siguiente línea de código:
import numpy as np
“np” es la convención que se utiliza para emplear NumPy dentro del código.
Hay diferentes maneras de crear un array. En esta sección veremos una visión general de las metodologías más comunes:
Crear un array sin ningún elemento
Si quieres crear un array unidimensional con solamente 2 elementos utilizas el siguiente código:
np.empty(2)
np.empty( 2, 3])
np.zeros(2)
np.zeros([2, 3])
np.ones(2)
np.ones([2, 3])
np.arange(3)
np.arange(2,7)
np.random.rand(3,2)
Añadir y eliminar elementos
Podemos realizar una serie de operaciones rápidas en un array de NumPy. Esto hace de NumPy una librería altamente funcional para los usuarios de Python.
Añadir elementos
Podemos añadir nuevos elementos a un array ya creado, como se muestra a continuación:
a = np.array((1,2,3))
np.append(a,(4,5))
a = np.array((1,2,3))
np.delete(a,1)
Atributos de los arrays
Los arrays de NumPy tienen una serie de atributos que son de gran utilidad, a continuación mencionaremos solamente algunos.
Conocer la forma del array
Uno de los atributos más utilizados es conocer la forma del array, este nos devuelve el número de columnas y filas que tiene el array.
a = np.array([[1,2],[3,4]])
a.shape
a = np.array([[1,2],[3,4]])
a.ndim
a = np.array([[1,2],[3,4]])
a.size
a = np.array([[1,2],[3,4]])
a.dtype
Funciones matemáticas
NumPy ofrece un rango de poderosas funciones matemáticas. Esta es una de las razones por las que la librería es popular en los campos cuantitativos. Además, un número de librerías están construidas sobre NumPy debido a que tiene un rico conjunto de características matemáticas.
Suma y resta de arrays
De las operaciones matemáticas básicas que se pueden realizar con NumPy es el de sumar y restar los arrays. Se puede usar utilizando el signo matemático correspondiente para cada operación o utilización la función de NumPy establecida para esto.
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a + b
c = np.add(a, b)
print(c)
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a - b
c = np.subtract(a, b)
print(c)
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a * b
c = np.multiply(a, b)
print(c)
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a / b
c = np.divide(a, b)
print(c)
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a / b
c = np.divide(a, b)
print(c)
Ejecutando el código anterior obtenemos la raíz cuadrada de todos los elementos del array.
Media y mediana del arrays
Otra de las operaciones matemáticas que podemos hacer en NumPy se encuentran relacionadas a las estadísticas, como lo es obtener la media y mediana del array, para esto, de igual forma, utilizamos las funciones propias de NumPy, como se muestra a continuación.
a = np.array([[1,2],[3,4]])
b = np.mean(a)
print(b)
a = np.array([[1,2],[3,4]])
b = np.median(a)
print(b)
Velocidad de NumPy
Seguramente te preguntarás porque usar NumPy en vez de utilizar las listas propias que ofrece Python para manejar estos datos, la primera razón es que NumPy ocupa menos memoria en comparación a las lista de Python, a su vez es bastante rápido en términos de ejecución. Pero veamos esto en el siguiente ejemplo:
import sys
S= range(1000)
print(sys.getsizeof(5)*len(S))
D= np.arange(1000)
print(D.size*D.itemsize)
Este resultado muestra que la memoria asignada para la matriz creada por Python es de 28000, mientras que la memoria asignada por la matriz NumPy es de solo 8000, con esto podemos concluir que hay una gran diferencia entre los dos y esto hace que las matrices creadas con NumPy sea la opción preferida.
Evaluemos ahora la rapidez.
import time
SIZE = 1000000
L1= range(SIZE)
L2= range(SIZE)
A1= np.arange(SIZE)
A2=np.arange(SIZE)
start= time.time()
result=[(x,y) for x,y in zip(L1,L2)]
print((time.time()-start)*1000)
start=time.time()
result= A1+A2
print((time.time()-start)*1000)
En este código se han definido dos listas en Python y dos matrices esta vez utilizando NumPy, posteriormente hemos comparado el tiempo tomado para encontrar la suma de los elementos. Si observas los resultados, hay una diferencia significativa entre los dos, en el primero obtuvimos 207 ms mientras que la operación realizada con NumPy solamente tomo 51 ms en ser ejecutada. Por lo tanto, las matriz creadas con NumPy son más rápida que la listas creadas directamente por Python.
Otro detalle que tienes que ver acá es que para hacer esta operación para el primer caso tuvimos que utilizar “for”, mientras que para el segundo caso simplemente sumamos las dos matrices sin mucho esfuerzo.
Estas es solo una visión general de las funciones básicas que ofrece la librería de NumPy. En los últimos años NumPy ha ganado una enorme popularidad y se considera una de las principales librerías de Python que hay que utilizar.
Felicidades!! Que gran página para los tiempos actuales. La educación de matrices usando Numpy está excelente.
Hola German, muchas gracias por tus palabras. Espero que la información que publico te este ayudando en tu aprendizaje. Saludos.
Buen dia querias felicitarte por que por fin encontre a alguien como tu que me haha el favor el enseñarme con plastilina todo estè hermano que querias y ahora Estoy comenzando a conocer, sigue asi.
Muchas gracias por tu comentario. Saludos.
Buen dia querias felicitarte por que por fin encontre a alguien como tu que me haha el favor el enseñarme con plastilina todo estè hermoso mundo que queria y ahora Estoy comenzando a conocer, sigue asi.
Muchas gracias por tu comentario. Saludos.
excelente curso de Numpy gracias por todos estos conocimientos
Hola Oscar, me alegra que estés aprendiendo de este información. Saludos.
hola Ligdi.
estoy haciendo uno por uno los ejercicios que describis (practicando en visual code), y creo que el codigo de la raiz cuadrada que muesta no es la que corresponde porque se parece a la division, o sino, no estoy comprendiendo.
si me facilitas el codigo te voy a agradecer porque estuve probando con las operaciones de python pero no me salen.
besos