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