Como corrigir: valueerror: os operandos não puderam ser transmitidos com formas


Um erro que você pode encontrar ao usar Python é:

 ValueError : operands could not be broadcast together with shapes (2,2) (2,3) 

Este erro ocorre quando você tenta realizar a multiplicação de matrizes usando um sinal de multiplicação ( * ) em Python em vez da função numpy.dot() .

Os exemplos a seguir mostram como corrigir esse erro em cada cenário.

Como reproduzir o erro

Suponha que temos uma matriz C 2×2, que possui 2 linhas e 2 colunas:

Suponha que também temos uma matriz D 2×3, que possui 2 linhas e 3 colunas:

Veja como multiplicar a matriz C pela matriz D:

Isso resulta na seguinte matriz:

Suponha que tentemos realizar esta multiplicação de matrizes em Python usando um sinal de multiplicação (*) da seguinte forma:

 import numpy as np

#define matrices
C = np. array ([7, 5, 6, 3]). reshape (2, 2)
D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3)

#print dies
print (C)

[[7 5]
 [6 3]]

print (D)

[[2 1 4]
 [5 1 2]]

#attempt to multiply two matrices together
CD

ValueError: operands could not be broadcast together with shapes (2,2) (2,3)  

Recebemos um ValueError . Podemos consultar a documentação do NumPy para entender por que recebemos este erro:

Ao operar em dois arrays, o NumPy compara suas formas elemento por elemento. Ele começa com as dimensões finais (ou seja, mais à direita) e segue para a esquerda. Duas dimensões são compatíveis quando

  • eles são iguais, ou
  • um deles é 1

Se essas condições não forem atendidas, uma exceção ValueError: Operands could not be broadcast together será lançada, indicando que as matrizes têm formas incompatíveis.

Como nossas duas matrizes não têm o mesmo valor para suas dimensões finais (a matriz C tem uma dimensão final de 2 e a matriz D tem uma dimensão final de 3), recebemos um erro.

Como corrigir o erro

A maneira mais fácil de corrigir esse erro é simplesmente usar a função numpy.dot() para realizar a multiplicação da matriz:

 import numpy as np

#define matrices
C = np. array ([7, 5, 6, 3]). reshape (2, 2)
D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3)

#perform matrix multiplication
C. dowry (D)

array([[39, 12, 38],
       [27, 9, 30]])

Observe que evitamos um ValueError e conseguimos multiplicar ambas as matrizes com sucesso.

Observe também que os resultados correspondem aos resultados que calculamos manualmente anteriormente.

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:

Como corrigir: as colunas se sobrepõem, mas nenhum sufixo é especificado
Como corrigir: o objeto ‘numpy.ndarray’ não possui um atributo ‘append’
Como corrigir: se você usar todos os valores escalares, precisará passar um índice
Como corrigir: ValueError: não é possível converter float NaN em int

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *