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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *