Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Difusión | Matemáticas con NumPy
Numpy Definitivo

bookDifusión

Antes de profundizar en las operaciones matemáticas en NumPy, es importante comprender un concepto clave: broadcasting.

Note
Definición

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.

Note
Nota

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.

123456789
import 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)
copy
Note
Nota

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).

123456789
import 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)
copy

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.

123456
import 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)
copy

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:

12345678
import 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)
copy
question mark

Selecciona todos los arreglos con formas compatibles:

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 3.7

bookDifusión

Desliza para mostrar el menú

Antes de profundizar en las operaciones matemáticas en NumPy, es importante comprender un concepto clave: broadcasting.

Note
Definición

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.

Note
Nota

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.

123456789
import 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)
copy
Note
Nota

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).

123456789
import 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)
copy

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.

123456
import 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)
copy

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:

12345678
import 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)
copy
question mark

Selecciona todos los arreglos con formas compatibles:

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1
some-alt