¿Qué son las dimensiones y por qué son importantes en matrices y tensores?
Las dimensiones de los elementos como escalares, vectores, matrices y tensores son un concepto fundamental en el manejo de datos en Python. La comprensión de las dimensiones ayuda a realizar cálculos correctamente y a interpretar los resultados esperados. A menudo, aunque una operación matemática no esté definida estrictamente, Python puede ejecutarla, lo que puede generar confusión. Por ello, entender cómo funcionan las dimensiones es crucial para garantizar que las operaciones que ejecutamos son las correctas.
¿Cómo representamos las dimensiones en Python?
En Python, utilizamos librerías para manejar las dimensiones y las operaciones sobre escalar, vector, matriz y tensor. Veamos algunos ejemplos:
Escalar
Un escalar es un elemento que no tiene dimensiones. Es simplemente un valor individual. Cuando verificamos su dimensión utilizando ciertas funciones en Python, el sistema nos indica que no posee este atributo.
Vector
Un vector se representa normalmente como un conjunto unidimensional de números. Por ejemplo, un vector con elementos [1, 2, 3] se considera que tiene una dimensión con tres elementos. Cuando usamos la función len para determinar su tamaño, obtendremos el número de elementos en la primera dimensión.
Matriz
Una matriz es una colección bidimensional de números. Por ejemplo, una matriz 2x2 tiene dos elementos en las filas y dos en las columnas. Utilizando la función len, se retorna el número de filas, mientras que shape proporciona una visión más completa, retornando un arreglo tal como [2, 2] que indica filas y columnas.
Código de ejemplo para matrices:
import numpy as np
matriz = np.array([[1,2],[3,4]])print("Tamaño del arreglo:", matriz.shape)# Devuelve (2, 2)
Tensor
Los tensores son extensiones de las matrices a más dimensiones. Un tensor 3x3x3 es un arreglo tridimensional, donde le primero '3' representa el número de matrices en las primeras dos dimensiones. Este se utiliza comúnmente para representar datos complejos, como una serie de imágenes que cambian con el tiempo, siendo útil en la representación de videos.
Ejemplo de manejo de tensores:
tensor = np.ones((3,3,3))print("Forma del tensor:", tensor.shape)# Devuelve (3, 3, 3)
Herramientas y funciones útiles para trabajar con dimensiones
Al trabajar con Python, existen múltiples funciones que son útiles para obtener información relacionada a las dimensiones:
len(): Devuelve la cantidad de elementos en la primera dimensión.
shape: Proporciona todas las dimensiones de un objeto como una tupla.
size: Calcula el total de elementos multiplicando todas las dimensiones, útil para entender el tamaño total de un objeto.
Diferencias entre len() y shape
Mientras que len() solo retiene el número de elementos en la primera dimensión, shape ofrece un panorama completo de todas las dimensiones del objeto. Esto es crucial al tratar con objetos más complejos como matrices y tensores, donde conocer todas las dimensiones nos permite asegurar que las operaciones que implementamos son las correctas.
Consejos prácticos para estudiantes
Al comenzar con matrices y tensores en Python:
Experimenta creando varios vectores, matrices y tensores para practicar la interpretación de sus dimensiones.
Usa la función shape en lugar de len para obtener información detallada sobre las dimensiones.
Realiza operaciones con estos elementos y nota cómo cambian las dimensiones.
Ejercítate en casos de uso, como la representación de un video mediante tensores, para familiarizarte con su aplicación práctica.
Continúa explorando y no dudes en experimentar. Las matemáticas y las definiciones pueden parecer complejas, pero con práctica y determinación, dominarás el arte de las dimensiones en Python. ¡Sigue adelante y descubre el fascinante mundo de la programación y el procesamiento de datos!
es incorrecta la interpretación de hace el profesor del shape del tensor. (3,3,3) indica respectivamente:
(numero de matrices, numero_filas, número_columnas)
si se hace por ejemplo:
#para recuperar cada matriz, vemos que debemos hacer:#tensor[0,:,:] donde se recupera la matriz 1# tensor[1,:,:] se recupera la matriz 2# tensor[2,:,:] se recupera la tercera matriz
tensor[2,:,:]
Comprobado.
Gracias!
Hola Johan,
Hm creo que la interpretación del profesor es correcta. Según entendí el dice que tensor[0, :, :] daría la primera fila del tensor. Es decir, te daría una matriz pero conformada por todos los elementos que hacen parte de la fila 1 en todas las matrices. Podemos verlo mejor con un tensor de dimensiones diferentes, como (5, 3, 2).
Gracias por plantear el caso!
Una corrección al comentario realizado al final del video por el profesor acerca de lo que representan los números obtenidos por medio de la función .shape aplicado en el tensor.
El primer número obtenido representa la cantidad de capas de matrices que tiene el tensor.
El segundo número obtenido representa la cantidad de filas que tiene cada matriz del tensor.
El tercer número obtenido representa la cantidad de columnas que tiene cada matriz del tensor.
La interpretación del profesor es correcta, él lo habla como una generalización de los subíndices matriciales, como se ven en análisis tensorial, solo que computacionalmente pareciera distinto (aunque no lo es).
Dimensiones en los arreglos.
shape: es un atributo de los arreglos, indica las dimensiones del arreglo de acuerdo a su preponderancia.
En un vector indica la cantidad de elementos (nro de columnas).
En una matriz indica primero el número de filas (cantidad de vectores) y luego en de columnas
en un tensor indica el número de matrices, luego el número de vectores (filas) y el número de elementos por vector (columnas)
Sintaxis:
<arreglo>.shape
len(): es un método que devuelve la dimension principal del arreglo (elementos, filas o matrices según sea vector, matriz o tensor)
Sintaxis:
len(<arreglo>)
size: es un atributo que contiene la cantidad de elementos del arreglo.
Sintaxis:
<arreglo>.size
Nota
A través de un tensor podemos representar la variación de una matriz a través del tiempo (si representamos una imagen con una matriz podemos representar un video con un tensor) o como vimos anteriormente los valores RBG de una imagen a color.
Nuevamente te encuentro comentando crack, siempre salvandome
el profe no lo mencionó, pero cuando se trabajan con imagenes a color, estas se pueden ver como como tres matrices donde cada matriz se llama un "canal" o "channel" de la imagen y corresponden a los colores RGB('red-green-blue').
Este curso se hace imposible sin verlo en 1.5x
Me relaja la voz del profe >-<
El profesor se confundió en los parametros de .shape.
Es en este orden (n° matrices, n° filas, n° columnas)
En el minuto 6:30 se plantea algo interesante. Cuando se analiza la forma del tensor se tiene una tupla (3, 3, 3). El primer "3" indica el número de matrices que hay en el tensor, o visto de otra forma, los elementos en la primera fila del tensor. Por ejemplo, si se recupera:
print(tensor[0,:,:])[[123][456][678]]
Nótese que se imprime la primera matriz del tensor.
Siguiendo la misma lógica, se puede recuperar el segundo vector de la primera matriz:
print(tensor[0,1,:])[456]
Ahora de este mismo vector, re quiere recuperar el tercer número:
print(tensor[0,1,2])6
Espero y esta aclaración les haya sido de ayuda ;)
Pueden crear los esquemas apoyandose en una función para crear los arrays aleatorios con sus dimensiones
Ahi lo que dice es que genere numeros aleatorios enteros de 1 a 100 y el último es [numero de vectores, cantidad de numeros en el vector]
que bien, gracias por compartir
¿Cuál es la diferencia entre utilizar np.array y no hacerlo? digo ya vi que sin esa función no se puede utilizar ninguno de los atributos pero no entiendo muy bien el ¿porque?
Por que cuando utilizas el array, estas recorriendo los atributos
de tu vector o matriz, si no se utiliza no se estaran recorriendo los atributos, por lo tanto te saldría un error.
La librería numpy facilita y hace muy eficiente trabajar con números, en estos ejemplos tan simples no se nota la diferencia, pero cuando se trabaje con una cantidad enorme de datos, va a hacer la diferencia.
Cuando se crea un tensor ¿todos las matrices del tensor deben ser de la misma dimension? numpy me da un warning al crear tensores con matrices de distintas dimensiones entonces me imagino que sera matematicamente incorrecto pero queria confirmar. Gracias
Hola :)
Así es, es necesario que sean de las mismas dimensiones. Tengo entendido que en caso de no serlo, más adelante no podrías hacer operaciones entre matrices como producto punto
Antes cuando intentaba usar .shape o size en mi tensor me saltaba un error. Hoy he vuelto a intentarlo y aunque ya no esta el error solo me aparece como (0.) o 0 ¿Alguna idea? Gracias de antemano :)
Hola Daniela, nos podrías compartir tu código para poder ayudarte de mejor manera, sin contexto es muy difícil hacerlo.
tensor = np.array([[[1,2,3],[4,5,6],[6,7,8],[6,7,8]],[[11,12,13],[14,15,16],[17,18,19],[6,7,8]],[[21,22,23],[24,25,26],[27,28,29],[6,7,8]],])print(tensor.size)print(tensor.shape)print(tensor.len)36(3,4,3)---------------------------------------------------------------------------AttributeErrorTraceback(most recent call last)<ipython-input-21-e3e4c4750c77>in<module>8print(tensor.size)9print(tensor.shape)--->10print(tensor.len)AttributeError:'numpy.ndarray' object has no attribute 'len'
++Comparto apuntes de la clase:++
Dimensión de escalares, vectores, matrices y tensores
se usa la función .shape que calcula la dimensión del vector (#elementos), matriz (n°filas, n°columnas) o tensor (n°matrices, n°filas, n°columnas).
La función len(elemento) nos dice cantidad de elementos en caso del vector, cantidad de filas (vectores) en caso de la matriz y la cantidad de matrices en el caso de tensores.
la función elemento**.size** retorna la cantidad de elementos totales
Hago una observación: la intepretación del profesor en el minuto 4:52 .
len(matriz) NO está devolviendo la cantidad de elementos de la primer columna. Sino que el método len intepreta que hay dos listas dentro de la lista ya que una matriz es justamente esto, listas apiladas.