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