Librería NumPy

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.

Probabilidad en Machine learning

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 Teoria 1

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.

Numpy Teoria 2

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.
historia de machine learning

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.

Numpy Teoria 3

historia de machine learning

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)
				
			

NumPy 1

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)
				
			

NumPy 2

Entre los tipos de datos que pueden manejar los arrays de NumPy se encuentran booleanos, entero, flotante y complejos. 

estadísticas en machine learning

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)
				
			

NumPy 3

Si quieres crear un array bidimensional debes indicar el número de filas y columnas que tendrá el array, como se indica a continuación:

				
					np.empty( 2, 3])
				
			

NumPy 4

Acá estamos creando un array con 2 filas y 3 columnas.

Crear un array con ceros

Para crear un array unidimensional con 2 elementos, ambos ceros utilizamos el siguiente código:

				
					np.zeros(2)
				
			

NumPy 5

Por su parte para crear un array bidimensional debes indicar el número de filas y columnas que tendrá el array:

				
					np.zeros([2, 3])
				
			

NumPy 6

Crear un array con unos

Para crear un array unidimensional con 2 elementos, ambos unos utilizamos el siguiente código:

				
					np.ones(2)
				
			

NumPy 7

En caso de que quieres crear un array bidimensional con solamente unos debes indicar el número de filas y columnas que tendrá el array, como se indica a continuación:

				
					np.ones([2, 3])
				
			

NumPy 8

Crear un array con rangos de elementos

Para crear un array con un rango de elementos, por ejemplo 3, escribimos el siguiente código:

				
					np.arange(3)
				
			

NumPy 9

Si quieres crear un array con un rango de elementos, con números entre 2 y 7, por ejemplo, escribes el siguiente código:

				
					np.arange(2,7)
				
			

Imagen 10

Crear un array con elementos aleatorios

Para crear un array un con elementos aleatorios debemos utilizar la siguiente instrucción e indicar el número de filas y columnas que tendrá el array.

				
					np.random.rand(3,2)
				
			

Imagen 11

estadísticas en machine learning

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))
				
			

Imagen 12

Con el anterior código se agrega los elementos 4 y 5 al array “a”.

Eliminar elementos

De la misma manera podemos eliminar elementos en los arrays ya creados, para esto solamente debemos indicar la posición del elemento que queremos eliminar.

				
					a = np.array((1,2,3))
np.delete(a,1)
				
			

Imagen 13

Con el anterior código se elimina el segundo elemento del array “a”.

estadísticas en machine learning

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
				
			

Imagen 14

Con el anterior código nos devuelve que el array “a” cuenta con 2 columnas y 2 filas.

Conocer el número de dimensiones del array

También podemos conocer el número de dimensiones con el que cuenta el array.

				
					a = np.array([[1,2],[3,4]])
a.ndim
				
			

Imagen 15

Con el anterior código nos devuelve que el array “a” es de 2 dimensiones.

Conocer el número de elementos del array

Otro de los atributos útiles de NumPy es conocer el número de elementos del array, esto es muy útil sobre todo cuando tenemos muchos datos.

				
					a = np.array([[1,2],[3,4]])
a.size
				
			

Imagen 16

Con el anterior código nos devuelve que el array “a” cuenta con 4 elementos.

Conocer el tipo de datos del array

También podemos conocer el tipo de datos del array, esto lo podemos saber utilizando el código siguiente:

				
					a = np.array([[1,2],[3,4]])
a.dtype
				
			

Imagen 17

Con el anterior código nos devuelve que el array “a” cuenta con datos enteros 64.

algebra lineal en machine learning

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)
				
			

Imagen 18

En las líneas de código anteriores se sumaron los arrays “a” y “b” utilizando las dos formas posibles.

				
					a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a - b
c = np.subtract(a, b)
print(c)
				
			

Imagen 19

En el código anterior se realizo la resta de los arrays “a” y “b”.

Multiplicación y división de arrays

Igual que en el caso anterior, podemos multiplicar y dividir los arrays utilizando los signos matemáticos correspondiente o utilizando las funciones propias de NumPy.

				
					a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a * b
c = np.multiply(a, b)
print(c)
				
			

Imagen 20

En el código anterior realizamos la multiplicación de los arrays “a” y “b”.

				
					a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a / b
c = np.divide(a, b)
print(c)
				
			

Imagen 21

En el código anterior se realizó la división de los arrays “a” y “b”.

Raíz cuadrada arrays

Una de las tantas operaciones matemáticas que se pueden realizar con NumPy es obtener la raíz cuadrada de los elementos del array, para esto se utilizan la función específica como se muestra a continuación.

				
					a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
c = a / b
c = np.divide(a, b)
print(c)
				
			

Imagen 22

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)
				
			

Imagen 23

Con el código anterior obtenemos la media del array “a”.

				
					a = np.array([[1,2],[3,4]])
b = np.median(a)
print(b)
				
			

Imagen 23

Con el código anterior obtenemos la mediana del array “a”.

historia de machine learning

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)
				
			

Introducción-a-Numpy-Python-5

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)
				
			

Introducción-a-Numpy-Python-6

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.

Si te estás iniciando en la programación para Machine Learning y aún no te sientes tan diestro, te ofrezco un pack con las instrucciones básicas de Python, NumPy y Pandas. Estas guías serán de gran utilidad si estás comenzando ya que podrás recurrir a ella cada vez que no te acuerdes de alguna instrucción o no sepas hacer algo que es rutinario al momento de programar Machine Learning. Para descargar el pack con las guías solamente tienes que ingresar a este enlace.

9 comentarios en “Librería NumPy”

  1. 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.

  2. 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.

  3. 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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *