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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *