Jak naprawić: błąd wartości: nie można rozgłaszać argumentów z kształtami
Błąd, który możesz napotkać podczas korzystania z Pythona, to:
ValueError : operands could not be broadcast together with shapes (2,2) (2,3)
Ten błąd występuje, gdy próbujesz wykonać mnożenie macierzy przy użyciu znaku mnożenia ( * ) w Pythonie zamiast funkcji numpy.dot() .
Poniższe przykłady pokazują, jak poprawić ten błąd w każdym scenariuszu.
Jak odtworzyć błąd
Załóżmy, że mamy macierz C 2×2, która ma 2 wiersze i 2 kolumny:
Załóżmy, że mamy także macierz D 2×3, która ma 2 wiersze i 3 kolumny:
Oto jak pomnożyć macierz C przez macierz D:
W rezultacie otrzymujemy następującą macierz:
Załóżmy, że próbujemy wykonać to mnożenie macierzy w Pythonie, używając znaku mnożenia (*) w następujący sposób:
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)
Otrzymujemy ValueError . Możemy odwołać się do dokumentacji NumPy, aby zrozumieć, dlaczego otrzymaliśmy ten błąd:
Podczas działania na dwóch tablicach NumPy porównuje ich kształty element po elemencie. Zaczyna się od wymiarów końcowych (tj. najbardziej na prawo) i kieruje się w lewo. Dwa wymiary są zgodne, gdy
- są równe, lub
- jeden z nich to 1
Jeśli te warunki nie są spełnione, zostanie zgłoszony wyjątek ValueError: Operands can be rozgłaszania razem , wskazujący, że tablice mają niezgodne kształty.
Ponieważ nasze dwie macierze mają różne wartości wymiarów końcowych (macierz C ma ostateczny wymiar 2, a macierz D ma końcowy wymiar 3), pojawia się błąd.
Jak naprawić błąd
Najprostszym sposobem naprawienia tego błędu jest po prostu użycie funkcji numpy.dot() w celu wykonania mnożenia macierzy:
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]])
Zauważ, że unikamy błędu ValueError i udaje nam się pomyślnie pomnożyć obie macierze.
Należy również pamiętać, że wyniki są zgodne z wynikami, które obliczyliśmy wcześniej ręcznie.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:
Jak naprawić: Kolumny nakładają się, ale nie określono żadnego sufiksu
Jak naprawić: Obiekt „numpy.ndarray” nie ma atrybutu „dołącz”.
Jak naprawić: jeśli używasz wszystkich wartości skalarnych, musisz przekazać indeks
Jak naprawić: ValueError: Nie można przekonwertować float NaN na int