Objetivo: Aprender a crear y manipular matrices utilizando la librería Numpy de Python.
Conocimientos previos: Programación básica en Python, concepto de vector y matriz.
Numpy es una librería para realizar cálculo numérico en python. La usaremos principalmente porque nos permite crear y modificar matrices, y hacer operaciones sobre ellas con facilidad.
Para comenzar a usar numpy, debemos importar la librería. En este caso la vamos a importar, y darle un sobrenombre al mismo tiempo, np, para que el código sea más legible
# importamos la librería numpy, y le damos como nombre np dentro del programa
import numpy as np
Ahora que tenemos la librería, empecemos creando un vector de 5 elementos.
La manera más común de crear una un vector o matriz ya inicializada es con la función np.array, que toma una lista (o lista de listas) como parámetro y devuelve una matriz de numpy.
lista=[25,12,15,66,12.5]
vector=np.array(lista)
print(vector)
¿Cuál es la diferencia entre vector y lista? Que vector, al ser un arreglo de numpy, nos permite hacer varias operaciones matemáticas de forma muy simple.
print("- vector original")
print(vector)
print("- sumarle 1 a cada elemento del vector:")
print(vector+1)
print("- multiplicar por 5 cada elemento del vector:")
print(vector*5)
print("- suma de los elementos:")
print(np.sum(vector))
print("- promedio (media) de los elementos:")
print(np.mean(vector)) #
print("- el vector sumado a si mismo:")
print(vector+vector)
print("- suma de vectores vector1 y vector2 (mismo tamaño):")
vector2=np.array([11,55,1.2,7.4,-8])
print(vector+vector2)
Así como con las listas, se utilizan los corchetes ([ ]) para acceder a sus elementos, y se pueden tomar slices o rebanadas del arreglo utilizando :
print(vector[3])
print(vector[1:4])
print(vector[1:])
print(vector[:4])
print(vector[:])
Es muy común crear un vector con valores 0 o 1. Por ejemplo, cuando se utiliza un vector de contadores, donde cada contador comienza en 0.
Para ello, utilizamos las funciones np.zeros
y np.ones
, respectivamente. Cada una toma como parámetro la cantidad de elementos del vector a crear.
print("- Vector de ceros:")
vector_ceros=np.zeros(5)
print(vector_ceros)
print("- Vector de unos:")
vector_unos=np.ones(5)
print(vector_unos)
#Combinando este tipo de creaciones con las operaciones aritméticas,
#podemos hacer varias inicializaciones muy rápidamente
# Por ejemplo, para crear un vector cuyos valores iniciales son todos 2.
print("- Vector con todos los elementos con valor 2:")
vector_dos=np.zeros(5)+2
print(vector_dos)
print("- Vector con todos los elementos con valor 2 (otra forma):")
vector_dos_otro=np.ones((5))*2
print(vector_dos_otro)
Los vectores son arreglos de una sola dimensión. Las matrices son arreglos de dos dimensiones; generalmente a la primera dimensión se la llama la de las filas, mientras que a la otra se la llama la de las columnas.
Por ende, para crearlas con np.array
, necesitamos no una lista de valores, sino una lista de valores por cada fila, o sea, una lista de listas.
Del mismo modo, para crearlas con np.zeros
o np.ones
, vamos a necesitar una tupla con dos elementos, uno por cada dimensión.
print("- Matriz creada con una lista de listas:")
lista_de_listas=[ [1 ,-4],
[12 , 3],
[7.2, 5]]
matriz = np.array(lista_de_listas)
print(matriz)
print("- Matriz creada con np.zeros:")
dimensiones=(2,3)
matriz_ceros = np.zeros(dimensiones)
print(matriz_ceros)
print("- Matriz creada con np.ones:")
dimensiones=(3,2)
matriz_unos = np.ones(dimensiones)
print(matriz_unos)
#también podemos usar np.copy para copiar una matriz
print("- Copia de la matriz creada con np.ones:")
matriz_unos_copia=np.copy(matriz_unos)
print(matriz_unos_copia)
# Ejercicio
# Crear una matriz de 4x9, que esté inicializada con el valor 0.5
matriz=0 #IMPLEMENTAR
print(matriz)
También podemos usar slices para acceder a partes de las matrices. Las matrices tienen dos dimensiones, así que ahora tenemos que usar dos indices o slices para seleccionar partes.
lista_de_listas=[ [1 ,-4],
[12 , 3],
[7.2, 5]]
a = np.array(lista_de_listas)
print("Elementos individuales")
print(a[0,1])
print(a[2,1])
print("Vector de elementos de la fila 1")
print(a[1,:])
print("Vector de elementos de la columna 0")
print(a[:,0])
print("Submatriz de 2x2 con las primeras dos filas")
print(a[0:2,:])
print("Submatriz de 2x2 con las ultimas dos filas")
print(a[1:3,:])
También podemos usar los slices para modificar matrices. La única diferencia es que ahora los usaremos para seleccionar que parte de la matriz vamos a cambiar.
lista_de_listas=[ [1,-4],
[12,3],
[7, 5.0]]
a = np.array(lista_de_listas)
print("- Matriz original:")
print(a)
print("- Le asignamos el valor 4 a los elementos de la columna 0:")
a[:,0]=4
print(a)
print("- Dividimos por 3 la columna 1:")
a[:,1]=a[:,1]/3.0
print(a)
print("- Multiplicamos por 5 la fila 1:")
a[1,:]=a[1,:]*5
print(a)
print("- Le sumamos 1 a toda la matriz:")
a=a+1
print(a)
#Ejercicios
lista_de_listas=[ [-44,12],
[12.0,51],
[1300, -5.0]]
a = np.array(lista_de_listas)
print("Matriz original")
print(a)
# Restarle 5 a la fila 2 de la matriz
#IMPLEMENTAR
print(a)
# Multiplicar por 2 toda la matriz
#IMPLEMENTAR
print(a)
# Dividir por -5 las dos primeras filas de la matriz
#IMPLEMENTAR
print(a)
#Imprimir la ultima fila de la matriz
ultima_fila=0 # IMPLEMENTAR
print(ultima_fila)
# Más ejercicios
# Calcular la suma de los elementos de a utilizando dos fors anidados
suma = 0
#IMPLEMENTAR
print(suma)
# Calcular la suma de los elementos de a utilizando np.sum
#IMPLEMENTAR
# Calcular el promedio de los elementos de las primeras dos filas de a utilizando dos fors anidados
promedio=0
#IMPLEMENTAR
print(promedio)
# Calcular el promedio de los elementos de las primeras dos filas de utilizando slices y np.mean
#IMPLEMENTAR
# Generar una matriz de 7 por 9. Las primeras 3 columnas de la matriz tienen que tener el valor 0.
# La cuarta columna debe tener el valor 0.5, excepto por el último valor de esa columna, que tiene que ser 0.7.
# Las otras tres columnas deben tener el valor 1.
# Luego imprimir la matriz
# Imprimir también el promedio de la ultima fila.
#IMPLEMENTAR
#La siguiente linea crea una matriz aleatoria de 5 por 5 con valores entre 0 y 1
matriz_aleatoria=np.random.rand(5,5)
print(matriz_aleatoria)
#Imprimir las posiciones (Fila y columna) de los elementos de la matriz que son mayores que 0.5
#IMPLEMENTAR
Este tutorial corto intenta darte los elementos mínimos de numpy para poder trabajar con imágenes. Si querés aprender más, podés consultar esta referencia rápida de numpy en inglés o la referencia oficial de numpy.
También podés complementar este recurso con el curso online de Introducción a Python para científicos e ingenieros y sus videos.