Elementos Básicos de Álgebra Lineal en Python: Escalares a Tensores
Resumen
¿Cuáles son los elementos básicos de la matemática en álgebra lineal?
El aprendizaje de los fundamentos de álgebra lineal es esencial para emprender cualquier estudio de algoritmos avanzados como Machine Learning, Deep Learning y análisis de datos. Los conceptos básicos que exploraremos incluyen: escalar, vector, matriz y tensor.
¿Qué es un escalar?
En matemática, un escalar es simplemente un número único. Esto puede ser un número entero, un punto flotante (número con decimales), o un número complejo. No obstante, en Python, un escalar puede ser más flexible: además de ser cualquier tipo de número, también puede ser un string, o incluso una variable nula conocida como None.
Si quieres profundizar en cómo Python maneja los escalares, Platzi ofrece cursos en los que puedes explorar más sobre las estructuras de datos en Python.
¿Cómo reconocemos y definimos un vector?
Un vector es un conjunto de números ordenados. Imagina una caja donde puedes colocar múltiples números organizados de una manera particular. En Python, los vectores pueden ser creados usando la librería NumPy, un paquete esencial para cualquier persona interesada en cálculos numéricos complejos.
import numpy as np
vector = np.array([1,2,3,4])
¿Qué es una matriz?
La matriz es un paso más allá del vector, ya que da un mayor grado de libertad – podemos movernos a través de filas y columnas, creando así un sistema bidimensional de números.
En Python, una matriz también se crea mediante NumPy, pero contiene múltiples vectores alineados.
matriz = np.array([[1,2,3],[4,5,6],[7,8,9]])
¿Cómo definimos un tensor?
Finalmente, avanzamos hacia los tensores. Un tensor expande aún más la complejidad al añadir una tercera dimensión (o más) que agrupa múltiples matrices. Un tensor es esencial para realizar cálculos más complejos y para el trabajo con datos de múltiples dimensiones, como las imágenes.
Es interesante visualizar un tensor cuando contiene datos que podrían corresponder a imágenes, lo cual es común en Deep Learning. Usamos la librería Matplotlib para su representación visual.
import matplotlib.pyplot as plt
# Configurar para que los gráficos aparezcan debajo de la celda%matplotlib inline
# Crear y mostrar una visualización del tensorplt.imshow(tensor[0], interpolation='nearest')plt.show()
Consejos prácticos para practicar
Ahora que comprendes los conceptos clave, te animo a practicar creando distintas estructuras:
Escalar: Crea un escalar en Python con el número 42.
Vector: Define un vector que contenga los números primos 2, 3, 5 y 7.
Matriz: Genera una matriz de tamaño 3x2.
Tensor: Representa un tensor donde la primera fila sea blanca, la segunda negra, y la tercera gris.
Comparte tus resultados y cualquier duda en el sistema de discusiones de la plataforma. ¡Tu aportación enriquece la comunidad y afianci lecho lo aprendido!
No sabía exactamente por qué la función .imshow recibía un tensor si lo que mostraba se parecía más a una matriz, hasta que me puse a experimentar con los números y me di cuenta que realmente sí es una matriz con vectores de colores en RGB, la primera posición del vector es el rojo, la segunda el verde y la tercera el azul
🟢⚪🔴
.
I wanted to make a Mexican flag. However, I don't know how to draw an Eagle with vectors, yet. 😂
.
Wow! Que increíble. Cuanto tiempo te llevo hacerlo?
Hice el logo de Platzi.
jajajaj genial!!
Tremendo fanboy!
Vectores: arreglo unidimensional.
Matriz: arreglo bidimensional.
Tensores: arreglo de una o N dimensiones.
Tipos de datos
Escalar: en matemáticas se refiere a un número, en python se refiere a cualquier dato que ya no podemos dividir en más componentes.
Vector: es un grupo de escalares en forma de lista, sólo tiene una dimensión,
Matriz: es un grupo de vectores, podríamos decir una lista de listas. Tiene dos dimensiones
Tensor: es un grupo de matrices (una lista de matrices). Tiene tres dimensiones. Podemos pensar en un cubo de Rubik como un tensor.
Notas:
El módulo numpy (numerical python) nos sirve entre otras cosas para trabajar con arreglos numéricos (vectores, matrices o tensores) en python
import numpy as np #importacion convencional de numpy
arreglo_num = np.array([<arreglo>])
matplotlib,pyplot → un módulo de graficado en python (ahora lo usamos para graficar colores)
%matplotlib inline #con esta línea podemos graficar directamente en jupyter notebook
import matplotlib.pyplotas plt #importacion convencional de pyplot
plt.imshow(tensor, interpolation='nearest') #imshow recibe un tensor que representa los colores en RGB de una imagen
plt.show()
Gracias. Te entendí mejor a ti.
Muchas, estaba super perdido pero tu comentario me ha ayudado a comprender todo, claro y conciso. Ahora, es tiempo de practicar un poco u.u
%matplotlib inline
import matplotlib.pyplot as plt
plt.imshow(tensor, interpolation='nearest')
plt.show()
Me encantó el iniciar el tema de tensores con un ejemplo tan claro su potencial como es en el ámbito de ver, crear e interpretar imágenes.
Yo hice la bandera de mi país (México) con pixeles😅
Les dejo el código que usé (como verán, usé variables para nombrar los diferentes colores: Green, Red, Light Green, etc. y hacer el código más entendible):
# RetoExtendidoG=[0,68,47]R=[200,12,29]W=[255,255,255]B=[133,59,22]LG=[101,108,38]LB=[7,122,125]O=[249,162,69]tensorMexico=np.array([# Parte de arriba
[G,G,G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R],# Logo[G,G,G,G,G,G,G,G,G,W,W,W,W,B,W,W,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,W,W,B,W,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,LG,B,B,W,B,B,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,LG,B,B,B,B,B,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,LG,W,B,B,B,B,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,B,B,B,B,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,LG,R,W,B,B,R,LG,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,LG,W,G,R,G,W,LG,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,LG,LB,O,LB,LG,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,LG,LG,LG,W,W,W,R,R,R,R,R,R,R,R,R],# Parte de abajo
[G,G,G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R],[G,G,G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W,R,R,R,R,R,R,R,R,R],])
¿Cuál es el propósito de ''%matplotlib inline" en la celda no.12?
Ayuda a que cuando utilices matplotlib.pyplot, para mostrar un gráfico, no tengas que ejecutar plt.show().
En esa hoja de trabajo podras ver siempre los graficos cuando una línea de código los invoque; hace parte de las "funciones magicas" de Python.
Aquí mi pequeño aporte :D
Hice una función que te arrojase una matriz con números al azar para después mostrarla, ojalá alguien lo pruebe jsjsjs.
import random
def matriz_aleatoria(): tensor =[]for i inrange(3): fila =[]for j inrange(3): fila.append(random.randint(0,255)) tensor.append(fila)return tensor
plt.imshow(matriz_aleatoria(),interpolation='nearest')plt.show()
Y aquí el resultado:
Buen código.
Me entro curiosidad de 2 cosas:
.
Que a partir de que, tu input para imshow eran 9 números, tuvieses 9 colores. O sea que a cada número se le esta asignando un color, en la clase un color se forma por RGB con 3 números.
Que en la muestra no hayan combinaciones cálidas, lo intente en mi colab también.
.
La documentación de matplotlib asigna colores por 1 input, 3 inputs (RGB) o 4 inputs (RGBA) y aunque no se los detalles, parece que para 1 input esta conectado al parametro 'cmap' que por defecto es 'viridis' que escala el intérvalo de números al intérvalo de colores.
.
.
Por cierto, si se le agrega un corchete más el comportamiento es otro, y empieza a tomar triadas, reconocer como RGB y muestra por tanto ya no 9 sino solo 3 colores.
Los escalares, vectores, matrices, tensores se diferencian en los grados de libertad que tenemos para interactuar.
Escalar: en matemáticas es un número cualquiera, pero en python un escalar puede ser varias cosas (número entero, punto flotante, número complejo, string, null type, booleano, etc)
escalar =5.7686print(escalar)5.7686
Vector: es un conjunto de números
vector = np.array([2,3,5,7])print(vector)[2357]
Matriz: tiene 2 grados de libertad, el conjunto de varios vectores
%matplotlib inline
import matplotlib.pyplot as plt
plt.imshow(tensor, interpolation='nearest')
plt.show()
Un tensor se conforma de matrices de dimensiones iguales?
Tensor viene de la palabra tensor del latín que significa estiran. Son elementos matemáticos que estiran y alteran otros elementos matemáticos. Y por eso según esta definición los escalares son tensores y también las matrices. Ahora, después de una matiz, una matriz de matrices es el siguiente nivel de tensores.
Super claro esa diferencia entre vector, matriz y Tensor, por sus grados de libertad.