Cómo corregir: ValueError: ¿Los operandos no se pudieron transmitir junto con las formas?

La transmisión se refiere a la capacidad de NumPy para manejar arrays de diferentes formas durante las operaciones aritméticas. En realidad, en las arrays, las operaciones aritméticas se pueden realizar en los elementos correspondientes de las arrays. 

  • Si 2 arrays tienen la misma forma, entonces la operación aritmética entre 2 arrays se puede realizar sin problemas.
  • Si 2 arrays tienen formas diferentes , la operación de elemento a elemento no es posible . Pero NumPy lo hace posible usando el concepto de Broadcasting. La array más pequeña se transmite al tamaño de la array más grande para que sea posible realizar operaciones aritméticas en ellos.

Ejemplo:

Aquí, una array más pequeña de tamaño 1 × 1 se transmite a una array de mayor tamaño como 2 × 1, donde la segunda fila también contiene el mismo elemento de la primera fila, es decir, 1. Entonces, la primera fila => 1+1 = 2 y la segunda fila => 2+1=3.

Si intentamos realizar una operación aritmética entre 2 arrays de diferentes formas o diferentes dimensiones, a veces NumPy Broadcasting falla . Lanza un error como que los operandos no se pudieron transmitir junto con las formas. Hay algunos escenarios en los que puede ocurrir la transmisión y cuando falla. Entonces , si falla, necesitamos convertir la forma de la array.

Ejemplo: para mostrar dónde falla la transmisión

Python3

# import necessary packages
import numpy as np
  
# create 2 arrays
Array1 = np.arange(2).reshape(1, 2)
Array2 = np.arange(2, 10).reshape(3, 3)
  
# print 2 arrays
print(Array1)
print(Array2)
  
print(Array1+Array2)

Producción:

Error lanzado

Para realizar la transmisión internamente, siga algunas reglas para convertir una array de tamaño pequeño en la forma de una array grande. Entonces, siempre que se produzca un error, verifique las reglas mencionadas a continuación para modificar el tamaño de la array para una transmisión exitosa.

Reglas para la transmisión

Regla 1:

Si ambas arrays tienen la misma forma o dimensiones, el intérprete no puede generar ningún error. Las operaciones aritméticas se pueden realizar en los elementos correspondientes.

Ejemplo: para representar la regla 1

Python3

# import necessary packages
import numpy as np
  
# create 2 arrays
Array1 = np.arange(4).reshape(2, 2)
Array2 = np.arange(4, 8).reshape(2, 2)
  
# print 2 arrays
print(Array1)
print(Array2)
  
# addition between 2 arrays
print('--Addition--')
print(Array1+Array2)

Producción:

Explicación

Array1 Array2 Resultado

[[0 1] + [[4 5] = [[0+4 1+5] = [[4 6]

 [2 3 ]] [6 7]] [2+6 3+7]] [8 10]]

Regla 2:

Si una array tiene una dimensión como 1, entonces las dimensiones adyacentes deben compararse con otra array. Si son iguales, transmite y realiza operaciones aritméticas entre ellos.

Ejemplo: Para representar la regla 2

Python3

# import necessary packages
import numpy as np
  
# create 2 arrays
Array1 = np.arange(2).reshape(1, 2)
Array2 = np.arange(2, 8).reshape(3, 2)
  
# print 2 arrays
print(Array1)
print(Array2)
  
# addition between 2 arrays
print('--Addition--')
print(Array1+Array2)

Producción:

Aquí Array1 tiene una dimensión como valor 1, por lo que debemos comparar la segunda dimensión, el valor de 2 arrays es el mismo o no. Si es igual, se produce la transmisión; de lo contrario, falla. Necesitamos convertir el tamaño de la array según la regla. En este ejemplo, los valores son los mismos, por lo que la operación de suma se realiza sin problemas.

Aquí Array1 se convierte en una array de forma de 3 × 2 que se agrega a Array 2 para dar el resultado.

[[0 1]

 [0 1]

 [0 1]]

Ejemplo: Para representar la regla 2

Python3

# import necessary packages
import numpy as np
  
# create 2 arrays
Array1 = np.arange(4).reshape(2, 2)
Array2 = np.arange(2).reshape(2, 1)
  
# print 2 arrays
print(Array1)
print(Array2)
  
# subtraction between 2 arrays
print('--Subtraction--')
print(Array1-Array2)

Producción:

Regla 3:

Si las arrays tienen la forma de m x n y n x m . En este caso, las dos arrays se transmiten a m x m si m>n o n x n si n>m.

Ejemplo: para representar la regla 3

Python3

# import necessary packages
import numpy as np
  
# create 2 arrays
Array1 = np.arange(2).reshape(2, 1)
Array2 = np.arange(2).reshape(1, 2)
  
# print 2 arrays
print(Array1)
print(Array2)
  
# addition between 2 arrays
print('--Addition--')
print(Array1+Array2)

Producción:

Explicación

Array1 forma- 2×1

Forma de array 2: 1 × 2, por lo que 2 arrays se transmiten en forma de 2 × 2.

Los arreglos se distribuyen de la siguiente manera

Array1 + Array2 Resultado

[[0 0] + [[0 1] [[0+0 0+1]

 [1 1]] [0 1]] [1+0 1+1]]

Regla 4:

Si alguna de las arrays tiene su forma 1 x 1 , entonces no importa la otra forma de array , simplemente transmite la array de forma 1 x 1 a la forma de otra array.

Ejemplo: para representar la regla 4

Python3

# import necessary packages
import numpy as np
  
# create 2 arrays
Array1 = np.arange(1).reshape(1, 1)
Array2 = np.arange(2).reshape(1, 2)
  
# print 2 arrays
print(Array1)
print(Array2)
  
# addition between 2 arrays
print('--Addition--')
print(Array1+Array2)

Producción

 

La forma de Array1 es 1 x 1 , por lo que se transmite a la forma de Array2, que es 1 x 2

Array1 + Array2 = Resultado

[[0 0]] + [[0 1]] = [[0 1]]

La solución para el ejemplo anterior donde falla la transmisión es simplemente convertir la forma de Array1 a 1 x 3   o la forma de Array2 a 3 x 2 según el escenario-2 .

Publicación traducida automáticamente

Artículo escrito por akhilvasabhaktula03 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *