dot
jest mnożeniem macierzy, ale *
robi coś innego.
Mamy dwie tablice:
X
kształt (97,2)
y
kształt (2,1)
W przypadku tablic Numpy operacja
X * y
jest wykonywana pod względem elementów, ale jedną lub obie wartości można rozwinąć w jednym lub wielu wymiarach, aby były zgodne. Ta operacja nazywa się rozgłaszaniem. Wymiary, w których rozmiar wynosi 1 lub których brakuje, można wykorzystać w nadawaniu.
W powyższym przykładzie wymiary są niekompatybilne, ponieważ:
97 2
2 1
Tutaj są sprzeczne liczby w pierwszym wymiarze (97 i 2). Właśnie na to narzeka ValueError powyżej. Drugi wymiar byłby w porządku, ponieważ numer 1 z niczym nie koliduje.
Więcej informacji na temat zasad nadawania: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(Zwróć uwagę, że jeśli X
i y
są typu numpy.matrix
, to gwiazdka może być używana jako mnożenie macierzy. Zalecam trzymanie się z daleka odnumpy.matrix
, to zwykle komplikuje więcej niż upraszcza).
Twoje tablice powinny być w porządku numpy.dot
; jeśli pojawi się błąd numpy.dot
, musisz mieć jakiś inny błąd. Jeśli kształty są nieprawidłowe numpy.dot
, pojawi się inny wyjątek:
ValueError: matrices are not aligned
Jeśli nadal otrzymujesz ten błąd, prześlij minimalny przykład problemu. Przykładowe mnożenie z tablicami w kształcie twojego się udaje:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
nie powinno działać (i nie działa), alenp.dot(X,y)
iX.dot(y))
powinno działać (i dla mnie tak).