Comment réparer : ValueError : les opérandes n’ont pas pu être diffusés avec les formes
Une erreur que vous pouvez rencontrer lors de l’utilisation de Python est :
ValueError: operands could not be broadcast together with shapes (2,2) (2,3)
Cette erreur se produit lorsque vous tentez d’effectuer une multiplication matricielle à l’aide d’un signe de multiplication ( * ) en Python au lieu de la fonction numpy.dot() .
Les exemples suivants montrent comment corriger cette erreur dans chaque scénario.
Comment reproduire l’erreur
Supposons que nous ayons une matrice C 2×2, qui comporte 2 lignes et 2 colonnes :
Supposons que nous ayons également une matrice D 2×3, qui comporte 2 lignes et 3 colonnes :
Voici comment multiplier la matrice C par la matrice D :
Il en résulte la matrice suivante :
Supposons que nous essayions d’effectuer cette multiplication matricielle en Python en utilisant un signe de multiplication (*) comme suit :
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 matrices print(C) [[7 5] [6 3]] print(D) [[2 1 4] [5 1 2]] #attempt to multiply two matrices together C*D ValueError: operands could not be broadcast together with shapes (2,2) (2,3)
Nous recevons une ValueError . On peut se référer à la documentation NumPy pour comprendre pourquoi nous avons reçu cette erreur :
Lorsqu’il fonctionne sur deux tableaux, NumPy compare leurs formes élément par élément. Il commence par les dimensions de fin (c’est-à-dire les plus à droite) et progresse vers la gauche. Deux dimensions sont compatibles lorsque
- ils sont égaux, ou
- l’un d’eux est 1
Si ces conditions ne sont pas remplies, une exception ValueError: les opérandes n’ont pas pu être diffusés ensemble est levée, indiquant que les tableaux ont des formes incompatibles.
Puisque nos deux matrices n’ont pas la même valeur pour leurs dimensions finales (la matrice C a une dimension finale de 2 et la matrice D a une dimension finale de 3), nous recevons une erreur.
Comment réparer l’erreur
Le moyen le plus simple de corriger cette erreur consiste simplement à utiliser la fonction numpy.dot() pour effectuer la multiplication matricielle :
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.dot(D) array([[39, 12, 38], [27, 9, 30]])
Notez que nous évitons une ValueError et que nous parvenons à multiplier avec succès les deux matrices.
Notez également que les résultats correspondent aux résultats que nous avons calculés manuellement plus tôt.
Ressources additionnelles
Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes en Python :
Comment réparer : les colonnes se chevauchent mais aucun suffixe n’est spécifié
Comment réparer : l’objet ‘numpy.ndarray’ n’a pas d’attribut ‘append’
Comment réparer : si vous utilisez toutes les valeurs scalaires, vous devez transmettre un index
Comment réparer : ValueError : impossible de convertir le float NaN en entier