Transmisión
Desliza para mostrar el menú
Antes de profundizar en las operaciones matemáticas en NumPy, es importante comprender un concepto clave: broadcasting.
Broadcasting es una forma de alinear las formas de los arreglos para realizar operaciones aritméticas sin tener que redimensionarlos manualmente. En esencia, broadcasting ajusta automáticamente las formas de los arreglos.
Cuando NumPy trabaja con dos arreglos, verifica sus formas para comprobar la compatibilidad y determinar si pueden ser utilizados juntos mediante broadcasting.
Si dos arreglos ya tienen la misma forma, no se necesita broadcasting.
Mismo número de dimensiones
Supongamos que tenemos dos arreglos para los que queremos realizar una suma, con las siguientes formas: (2, 3) y (1, 3). NumPy compara las formas de los dos arreglos empezando por la dimensión más a la derecha y moviéndose hacia la izquierda. Es decir, primero compara 3 y 3, luego 2 y 1.
Dos dimensiones se consideran compatibles si son iguales o si una de ellas es 1:
- Para las dimensiones 3 y 3, son compatibles porque son iguales;
- Para las dimensiones 2 y 1, son compatibles porque una de ellas es 1.
Como todas las dimensiones son compatibles, las formas se consideran compatibles. Por lo tanto, los arreglos pueden ser broadcasted, resultando en una operación de suma estándar entre matrices de la misma forma, que se realiza elemento a elemento.
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
array_2 se crea como un arreglo 2D que contiene solo una fila, por lo que su forma es (1, 3).
¿Pero qué sucedería si lo creamos como un arreglo 1D con una forma de (3,)?
Diferente número de dimensiones
Cuando un arreglo tiene menos dimensiones que el otro, las dimensiones faltantes se tratan como si tuvieran un tamaño de 1. Por ejemplo, considera dos arreglos con formas (2, 3) y (3,). Aquí, 3 = 3, y la dimensión izquierda faltante se considera como 1, por lo que la forma (3,) se convierte en (1, 3). Como las formas (2, 3) y (1, 3) son compatibles, estos dos arreglos pueden ser transmitidos (broadcasted).
123456789import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Difusión de escalares
Además de las operaciones matemáticas con arrays, también se pueden realizar operaciones similares entre un array y un escalar (número) gracias a la difusión. En este caso, el array puede tener cualquier forma, ya que un escalar esencialmente no tiene forma y todas sus dimensiones se consideran 1. Por lo tanto, las formas son siempre compatibles.
123456import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Formas incompatibles
Ejemplo de formas incompatibles, donde no se puede realizar una operación aritmética porque el broadcasting no es posible:
Se tiene un arreglo de 2x3 y un arreglo unidimensional de longitud 2, es decir, una forma de (2,). La dimensión faltante se considera como 1, por lo que las formas se convierten en (2, 3) y (1, 2).
De izquierda a derecha: 3 != 2, por lo tanto, hay dimensiones incompatibles y, en consecuencia, formas incompatibles. Si se intenta ejecutar el código, se producirá un error:
12345678import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla