Oplossing: valueerror: operanden konden niet worden uitgezonden met vormen
Een fout die u kunt tegenkomen bij het gebruik van Python is:
ValueError : operands could not be broadcast together with shapes (2,2) (2,3)
Deze fout treedt op wanneer u matrixvermenigvuldiging probeert uit te voeren met behulp van een vermenigvuldigingsteken ( * ) in Python in plaats van de functie numpy.dot() .
De volgende voorbeelden laten zien hoe u deze fout in elk scenario kunt corrigeren.
Hoe de fout te reproduceren
Stel dat we een 2×2 matrix C hebben, die 2 rijen en 2 kolommen heeft:
Stel dat we ook een 2×3 matrix D hebben, die 2 rijen en 3 kolommen heeft:
Zo vermenigvuldig je matrix C met matrix D:
Dit resulteert in de volgende matrix:
Stel dat we deze matrixvermenigvuldiging in Python als volgt proberen uit te voeren met een vermenigvuldigingsteken (*):
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)
We ontvangen een ValueError . We kunnen de NumPy-documentatie raadplegen om te begrijpen waarom we deze fout hebben ontvangen:
Bij gebruik van twee arrays vergelijkt NumPy hun vormen element voor element. Het begint met de eindafmetingen (dus uiterst rechts) en werkt zich een weg naar links. Twee dimensies zijn compatibel wanneer
- ze zijn gelijk, of
- één ervan is 1
Als niet aan deze voorwaarden wordt voldaan, wordt de uitzondering ValueError: Operanden konden niet samen worden uitgezonden gegenereerd, wat aangeeft dat de arrays incompatibele vormen hebben.
Omdat onze twee matrices niet dezelfde waarde hebben voor hun uiteindelijke dimensies (matrix C heeft een uiteindelijke dimensie van 2 en matrix D heeft een uiteindelijke dimensie van 3), krijgen we een foutmelding.
Hoe u de fout kunt oplossen
De eenvoudigste manier om deze fout op te lossen is door eenvoudigweg de functie numpy.dot() te gebruiken om de matrixvermenigvuldiging uit te voeren:
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]])
Merk op dat we een ValueError vermijden en erin slagen beide matrices met succes te vermenigvuldigen.
Merk ook op dat de resultaten overeenkomen met de resultaten die we eerder handmatig hebben berekend.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in Python kunt oplossen:
Oplossing: Kolommen overlappen elkaar, maar er is geen achtervoegsel opgegeven
Oplossing: Object ’numpy.ndarray‘ heeft geen ‚append‘-attribuut
Oplossing: als u alle scalaire waarden gebruikt, moet u een index doorgeven
Oplossing: ValueError: Kan float NaN niet naar int converteren