¿Cuándo es posible sumar matrices de dimensiones distintas?
En el apasionante mundo de la programación y el análisis numérico, sumar matrices de distintas dimensiones a menudo trae consigo desafíos intrigantes. En esta clase, exploramos cuándo y cómo es posible llevar a cabo esta operación, aplicando las reglas del broadcasting en arrays de Numpy, una librería muy útil en Python. Comprender el broadcasting es clave para expandir tus habilidades de manipulación de matrices.
¿Qué es el broadcasting en Numpy?
El broadcasting es un concepto esencial en Numpy que permite realizar operaciones aritméticas en matrices de diferentes dimensiones. En esencia, Numpy extiende la matriz de menor dimensión para que coincida con la de mayor dimensión, siempre que ello sea posible siguiendo ciertas reglas. Esta capacidad aumenta significativamente la flexibilidad y eficiencia al trabajar con arrays.
¿Por qué numpy arroja error al sumar matrices y vectores no compatibles?
En ocasiones, nos vemos con la tarea de sumar un vector a una matriz. Supongamos que tenemos una matriz de dimensiones 3x2 y un vector de longitud 3. Numpy mostrará un error porque las dimensiones no coinciden para el broadcasting. La matriz de 3x2 necesita, al menos, un vector compatible que sea de longitud 2 (el número de columnas) para extender el vector por filas.
¿Cómo solucionar errores de dimensiones en la suma?
Una solución a este error es transponer la matriz cuando es posible. Cambiar las dimensiones de la matriz a 2x3, por ejemplo, permite sumar un vector de tres elementos. Este proceso funciona ya que, al transponer, la matriz y el vector se vuelven compatibles, permitiendo a Numpy extender el vector para sumar cada uno de sus elementos a las columnas de la matriz.
Ejemplos de broadcasting
¿Cómo funciona la adición de una matriz y un escalar?
Una aplicación común de broadcasting es sumar un escalar a todas las posiciones de una matriz. Por ejemplo, sumar 42 a una matriz de 3x2 implica que Numpy internamente replica el escalar, efectuando la suma como si fuese un array de la misma dimensión que la matriz. El resultado es sencillo: cada elemento de la matriz original incrementa en valor.
Aquí te dejamos un ejemplo práctico:
import numpy as np
# Definimos una matriz y un escalarmatriz = np.array([[1,2],[3,4],[5,6]])escalar =42# Suma de la matriz con el escalar aplicando broadcastingresultado = matriz + escalar
print(resultado)
El código demostrará cómo cada elemento de la matriz se incrementa por el valor del escalar.
¿Qué pasa cuando sumamos un vector a una matriz traspuesta?
Consideremos una matriz de 2x3 y un vector de longitud 3. Siguiendo las reglas del broadcasting, Numpy extenderá el vector para que coincida con las dimensiones de la matriz al sumar los tres elementos del vector a cada fila de la matriz.
Ejemplo en acción:
# Definimos una matriz traspuesta y un vectormatriz_t = np.array([[1,2,3],[4,5,6]])vector = np.array([10,20,30])# Suma de la matriz traspuesta con el vector usando broadcastingresultado = matriz_t + vector
print(resultado)
Aquí vemos cómo, de manera efectiva, cada elemento del vector se adiciona a sus respectivas filas.
¿Cómo practicar el concepto de broadcasting?
Un buen ejercicio para consolidar lo aprendido es tomar un vector de cinco elementos y sumarlo a una matriz de 5x5. Esto no solo fortalecerá tu comprensión del broadcasting, sino que también mejorará tu destreza en el uso de Numpy. ¡No dudes en experimentar y verás que las posibilidades son inmensas!
La exploración constante te permitirá profundizar tu conocimiento y dominar este potente recurso. Sigue practicando y adentrándote en el análisis de datos con confianza y curiosidad. ¡Estoy seguro de que lo lograrás con éxito!
Les recomiendo repasar el tema de "broadcasting" es súper poderoso cuando se quiere trabajar con redes neuronales al construir el forward pass y el backward pass, al igual que en otras cuestiones que involucren vectores y matrices.
Hola Johan , Busque más información de este tema , pero no encontre mucho , tendrás algún sitio que tenga información? en ingles o español esta ok, gracias!
Broadcasting: es extender la matriz o vector de menor tamaño para que se ajuste a la de mayor tamaño:
La frase más sencilla para describir el proceso.
esto resumen los 4 minutos de la clase jeje.
La funcion** random.randint**, te permite crear matrices con valores aleatorios, puedes definir el valor menor (Low) y el valor mas alto permitido (high) y el tamaño de la matriz o el vector con (size).
Buen aporte lo estaba utilizando y es bastante interesante gracias!
Suma de vectores y matrices
En python es posible sumar vectores y matrices, mediante un término llamado broadcasting (el mismo que usamos para sumar un escalar con una matriz)
Para sumar vectores y matrices debe cumplirse que ambos compartan la misma dimension en las columnas (elementos).
Entonces python extenderá el vector repitiéndolo hasta obtener una matriz de igual dimensión a la primera. Es decir sumará el vector a cada fila de la matriz
La regla a entender aqui es que broadcast depene del shape del elemento y aplica de la siguiente manera
si se suma un escalar siempre hay broadcasting
si se suma un vector importa el numero de columnas sean iguales en ambos elementos.
si es una matrix importa el numero de filas y columnas sean iguales en ambos elementos.
Explicado en forma de shape
una matrix de shape (2, 4) puede sumarse con un vector de shape (4,) o shape (1,)
un tensor de shape (6, 2, 3) se puede sumar un vector de shape (3,) o (1,) y una matrix de shape (2, 3)
El hecho de que las matrices tengan igual número de filas o columnas no significa que el broadcasting se pueda aplicar, ejemplo:
Para aplicar broadcasting alguna de estas dos condiciones debe satisfacerse:
Los arreglos tienen en común una dimensión que tiene el mismo número de elementos, o
Los arreglos tienen en común una dimensión que tiene un elemento.
Ejemplos:
Muy confuso
Muchas gracias por el aporte yo intente sumar una de 4,4 con una de 2,4 y para mi sorpresa no pude. ahora entiendo mejor, gracias.
Que tal, una pregunta, en que condiciones se puede hacer uso del broadcasting y en que condiciones no?
Hola Jesus,
Naturalmente como estamos trabajando con un a libreria entonces no es necesario. La respuesta seria cuando lo trabajes todo a mano, sin libreria.
Sin embargo, extrapolando este concepto, hay un caso mas avanzado donde se hace broadcasting (aunque con otro nombre) y es para nivelar la cantidad de datos de entrenamiento de un modelo cuando estamos trabajando con aprendizaje supervisado; para esos casos debes nivelar los datos de todos los tipos (labels) que tengas para que el modelo no se inlcine hacia ninguna clase y eso se logra nivelando los datos.
Ejemplo:
Si tiene 95% de los datos etiquetados como fraude y 5% como no fraude, entonces para entrenar tu modelo, debes nivelar esos porcetajes de tal forma que quede 50% y 50%.
Lo que se hace es duplicar muestrar de la clase menor (en este caso de no fraude) hasta completar 50% y 50%.
De esta forma, el modelo no se inclinará a predecir a la mayoria como no fraude.
A= np.array([[5,5,5,5,5],[10,10,10,10,10],[15,15,15,15,15],[20,20,20,20,20],[25,25,25,25,25]])vector = np.array([25,25,25,25,25])suma =A+ vector
print('Matriz')print(A)print('Vector')print(vector)print(suma)```
Además, por lo que experimenté, no funciona si el que se traspone es el vector.
Puedes sumar y puedes combinar sus Traspuesta como quieras y va a funcionar, ya que es una Matriz cuadrada sumado con un vector del mismo tamaño de su fila, columna ya que es el mismo tamaño.
Una Matriz Cuadrada Traspuesta no cambiara su dimension pero si el orden en el que estan sus vectores, sus valores cambian de filas a columnas. Aqui tienes un Sencillo ejemplo:
Puedes sumar y puedes combinar sus Traspuesta como quieras y va a funcionar, ya que es una Matriz cuadrada sumado con un vector del mismo tamaño de su fila, columna ya que es el mismo tamaño.
Una Matriz Cuadrada Traspuesta no cambiara su dimension pero si el orden en el que estan sus vectores, sus valores cambian de filas a columnas. Aqui tienes un Sencillo ejemplo:
Se supone que también debería aplicarse el broadcasting.
Hola Sebastian, es porque en el segundo caso no coinciden las dimensiones, matriz es de 3x2 y vector y vector.T son de 1x3, numpy trata a ambos como vectores fila de 3 elementos. Para poder hacer broacasting en ese caso podrías hacer:
matriz + vector.reshape(3,1)
Asi el vector se convierte a un vector columna de 3x1
Entonces, puedo sumar o restar matrices cuando estas tengan:
Mismo número de filas o
Mismo número de columnas
:thinking:
No necesariamente
@mariajosemv cierto!
Como funcionaria internamente el proceso que hizo al final del video? la verdad no entendi por què no le da error en ese caso
Hola!
Te recomiendo ir a la documentación
Me sirvió mucho para entender.
Por ejemplo, en el caso de la fila: la fila de la matriz debe contener la misma cantidad de elementos que el vector
Y esto sería igual para la última parte del video, en este caso lo hizo para la columna.
Muchas gracias, asi lo he entendio mejor
En NumPy, broadcasting es un conjunto de reglas que permite realizar operaciones aritméticas entre arrays de diferentes formas y tamaños, sin la necesidad de hacer copias de los datos. Básicamente, broadcasting extiende automáticamente un array con menor dimensionalidad para que tenga la misma forma que otro array con mayor dimensionalidad.
- El broadcasting se aplica en operaciones aritméticas entre arrays, como la suma, la resta, la multiplicación y la división. El broadcasting es muy útil en situaciones en las que no es posible o conveniente hacer que los arrays tengan las mismas formas.
import numpy as np
# Suma de matrices
A= np.array([[1,2],[3,4]])B= np.array([[5,6],[7,8]])C=A+Bprint(C)# resultado:[[68]# [1012]]# Suma de un escalar y una matriz
D=2*A+3print(D)# resultado:[[57]# [911]]
Hola, ¿qué software y hardware recomiendan para usar la pizarra que tiene el profesor?
Algo económico por hardware, una tableta gráfica básica casi de cualquier marca como Wacom o Xpen, y de software hasta la app de Recortes de windows te puede servir pero seguro hay algunas perfectas para cada campo de uso que debes investigar.
Si tienes una tablet con pen puedes usarla también como tableta gráfica -además te ganarias un 'monitor' más- ya sea nativamente si lo permitiese su software o a traves de una app móvil.
hola
Analizando un poco el proceso me imagino que el broadcasting funciona cuando las matrices comparten todas las medidas exceptuando 1 o cuando una o mas dimensions restantes es múltiplo del numero de la mayor (como ocurre sumando el 42 ya que 1 es múltiplo de todo)
¿estaría en lo correcto ? y ¿existen otras formas de hacerlo?
Cuantos elementos puede contener un Tensor?
La verdad es que matemáticamente puede tener infinitos elementos. Un tensor puede estar conformado por n-filas, m-columnas y l-matrices.
En NumPy, puedes sumar matrices con dimensiones distintas usando broadcasting, pero solo si sus formas son compatibles. Veamos cómo funciona y luego un ejemplo claro.
📘 Reglas de Broadcasting en NumPy
Dos dimensiones son compatibles si:
Son iguales, o
Una de ellas es 1
NumPy "extiende" automáticamente la dimensión con tamaño 1 para que coincida con la otra.
🧮 Ejemplo práctico
Supón que tienes:
import numpy as np
A = np.array([[1, 2, 3],
[4, 5, 6]]) # Forma (2, 3)
B = np.array([[10],
[20]]) # Forma (2, 1)
La forma de A es (2, 3)
La forma de B es (2, 1)
✅ Las dimensiones son compatibles:
A: (2, 3)
B: (2, 1) → se "expande" a (2, 3)
Entonces puedes hacer:
C = A + B
print(C)
Resultado:
[[11 12 13]
[24 25 26]]
❌ Ejemplo no compatible
A = np.array([[1, 2, 3]])
B = np.array([[1, 2]])
# A.shape = (1, 3)
# B.shape = (1, 2)
# Esto generará un error porque las dimensiones 3 y 2 no son compatibles.
C = A + B # ❌ ValueError
✅ Usos típicos de Broadcasting
Sumar un vector a una matriz fila por fila o columna por columna.
Operaciones entre matrices y escalares.
Ajuste de dimensiones para datos en ML y ciencia de datos.