2013-08-15 31 views
5

In Matrix-Multiplikation, nehmen Sie an, dass die A ist eine 3 x 2-Matrix (3 Zeilen, 2 Spalten) und B ist eine 2 x 4 Matrix (2 Zeilen, 4 Spalten), dann wenn eine Matrix C = A * B, dann sollte C 3 Reihen und 4 Spalten haben. Warum macht numpy diese Multiplikation nicht? Wenn ich den folgenden Code versuchen, bekomme ich einen Fehler: ValueError: operands could not be broadcast together with shapes (3,2) (2,4)numpy Matrix Multiplikation Formen

a = np.ones((3,2)) 
b = np.ones((2,4)) 
print a*b 

Ich versuche, mit A und B zur Umsetzung und alwasy die gleiche Antwort bekommen. Warum? Wie mache ich die Matrix-Multiplikation in diesem Fall?

Antwort

15

Der Operator * für numpige Arrays ist elementweise Multiplikation (ähnlich dem Hadamard-Produkt für Arrays der gleichen Dimension), nicht multiplizieren Matrix.

Zum Beispiel:

>>> a 
array([[0], 
     [1], 
     [2]]) 
>>> b 
array([0, 1, 2]) 
>>> a*b 
array([[0, 0, 0], 
     [0, 1, 2], 
     [0, 2, 4]]) 

Für Matrix multiplizieren mit numpy Arrays:

>>> a = np.ones((3,2)) 
>>> b = np.ones((2,4)) 
>>> np.dot(a,b) 
array([[ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.]]) 

Zusätzlich können Sie die Matrix-Klasse verwenden:

>>> a=np.matrix(np.ones((3,2))) 
>>> b=np.matrix(np.ones((2,4))) 
>>> a*b 
matrix([[ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.], 
     [ 2., 2., 2., 2.]]) 

Mehr Informationen über Rundfunk numpy Arrays kann here gefunden werden, und weitere Informationen zu der Matrix-Klasse finden Sie here.

+0

Man sollte vorsichtig sein mit der Erweiterung sparse.linalg numpy, die die Klasse "LinearOperator" definiert. In dieser Klasse wird der Operator "*" als das übliche Matrix-Punkt-Produkt interpretiert. – Guillaume

+0

Wann sollte man in numpy Matrizen vs Arrays verwenden? Bis vor kurzem war mir nicht einmal bewusst, dass es eine Matrix-API gab. –

+0

@CharlieParker Ich würde nicht empfehlen, Matrizen zu verwenden, ich glaube, dass sie veraltet sein sollen. – Daniel