Difusión
Antes de profundizar en las operaciones matemáticas en NumPy, es importante comprender un concepto clave: broadcasting.
Broadcasting es un método para alinear las formas de los arreglos y realizar operaciones aritméticas sin necesidad de reajustarlos 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 avanzando 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.
Dado que todas las dimensiones son compatibles, las formas se consideran compatibles. Por lo tanto, los arreglos pueden ser transmitidos (broadcasted), resultando en una operación estándar de suma entre matrices de la misma forma, que se realiza elemento por 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é ocurriría si lo creamos como un arreglo 1D con forma (3,)
?
Diferente número de dimensiones
Cuando un arreglo tiene menos dimensiones que otro, las dimensiones faltantes se tratan como si tuvieran un tamaño de 1. Por ejemplo, considere 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)
. Dado que 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 arreglos, también es posible realizar operaciones similares entre un arreglo y un escalar (número) gracias a la difusión. En este caso, el arreglo 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
Consideremos también un ejemplo de formas incompatibles, donde no se puede realizar una operación aritmética porque el broadcasting no es posible:
Tenemos un array de 2x3
y un array unidimensional de longitud 2
, es decir, una forma de (2,)
. La dimensión faltante se considera 1, por lo que las formas se convierten en (2, 3)
y (1, 2)
.
Al avanzar de izquierda a derecha: 3 != 2, por lo que inmediatamente tenemos dimensiones incompatibles, y por lo tanto formas incompatibles. Si intentamos ejecutar el código, obtendremos 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
Awesome!
Completion rate improved to 3.7
Difusió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 un método para alinear las formas de los arreglos y realizar operaciones aritméticas sin necesidad de reajustarlos 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 avanzando 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.
Dado que todas las dimensiones son compatibles, las formas se consideran compatibles. Por lo tanto, los arreglos pueden ser transmitidos (broadcasted), resultando en una operación estándar de suma entre matrices de la misma forma, que se realiza elemento por 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é ocurriría si lo creamos como un arreglo 1D con forma (3,)
?
Diferente número de dimensiones
Cuando un arreglo tiene menos dimensiones que otro, las dimensiones faltantes se tratan como si tuvieran un tamaño de 1. Por ejemplo, considere 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)
. Dado que 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 arreglos, también es posible realizar operaciones similares entre un arreglo y un escalar (número) gracias a la difusión. En este caso, el arreglo 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
Consideremos también un ejemplo de formas incompatibles, donde no se puede realizar una operación aritmética porque el broadcasting no es posible:
Tenemos un array de 2x3
y un array unidimensional de longitud 2
, es decir, una forma de (2,)
. La dimensión faltante se considera 1, por lo que las formas se convierten en (2, 3)
y (1, 2)
.
Al avanzar de izquierda a derecha: 3 != 2, por lo que inmediatamente tenemos dimensiones incompatibles, y por lo tanto formas incompatibles. Si intentamos ejecutar el código, obtendremos 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!