dotjest mnożeniem macierzy, ale *robi coś innego.
Mamy dwie tablice:
Xkształt (97,2)
ykształ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 Xi ysą 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*ynie powinno działać (i nie działa), alenp.dot(X,y)iX.dot(y))powinno działać (i dla mnie tak).