Come risolvere il problema: valueerror: non è stato possibile trasmettere gli operandi con le forme


Un errore che potresti riscontrare quando usi Python è:

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

Questo errore si verifica quando si tenta di eseguire la moltiplicazione di matrici utilizzando un segno di moltiplicazione ( * ) in Python anziché la funzione numpy.dot() .

Negli esempi seguenti viene illustrato come correggere questo errore in ogni scenario.

Come riprodurre l’errore

Supponiamo di avere una matrice C 2×2, che ha 2 righe e 2 colonne:

Supponiamo di avere anche una matrice D 2×3, che ha 2 righe e 3 colonne:

Ecco come moltiplicare la matrice C per la matrice D:

Ciò si traduce nella seguente matrice:

Supponiamo di provare a eseguire questa moltiplicazione di matrici in Python utilizzando un segno di moltiplicazione (*) come segue:

 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)  

Riceviamo un ValueError . Possiamo fare riferimento alla documentazione di NumPy per capire perché abbiamo ricevuto questo errore:

Quando si opera su due array, NumPy confronta le loro forme elemento per elemento. Inizia con le dimensioni finali (ovvero più a destra) e procede verso sinistra. Due dimensioni sono compatibili quando

  • sono uguali, o
  • uno di questi è 1

Se queste condizioni non vengono soddisfatte, viene generata un’eccezione ValueError: Gli operandi non possono essere trasmessi insieme , indicando che gli array hanno forme incompatibili.

Poiché le nostre due matrici non hanno lo stesso valore per le loro dimensioni finali (la matrice C ha una dimensione finale di 2 e la matrice D ha una dimensione finale di 3), riceviamo un errore.

Come correggere l’errore

Il modo più semplice per correggere questo errore è utilizzare semplicemente la funzione numpy.dot() per eseguire la moltiplicazione della matrice:

 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]])

Nota che evitiamo un ValueError e riusciamo a moltiplicare con successo entrambe le matrici.

Tieni inoltre presente che i risultati corrispondono ai risultati che abbiamo calcolato manualmente in precedenza.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in Python:

Come risolvere il problema: le colonne si sovrappongono ma non è specificato alcun suffisso
Come risolvere il problema: l’oggetto “numpy.ndarray” non ha un attributo “append”.
Come risolvere il problema: se utilizzi tutti i valori scalari, devi passare un indice
Come risolvere il problema: ValueError: impossibile convertire float NaN in int

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *