Seite 1 von 1

Matrizenmultiplikation

Verfasst: Freitag 2. September 2022, 11:05
von Kobra23759
Kann jemand erklären warum es im Bsp Unterschiede zw. der Matrizenmultiplikation von np.matrix und np.array gibt
Fall A) und B) sind, wie erwartet, gleich
Fall C ) funktioniert nur wenn man m1 transponiert (was aber nicht richtig ist) (np.dot(m1,m2) ergibt Fehlermeldung
Fall D) wäre richtig

import numpy as np
######################################################
m4=np.matrix([[5,2,3],
[8,1,4]])
m5=np.matrix([[7,1],
[3,6],
[4,5]])
m6=np.dot(m4,m5) ;print("A) m6 (matrix)=",m6,"\n")
#####################################################
m4=np.array([[5,2,3],
[8,1,4]])
m5=np.array([[7,1],
[3,6],
[4,5]])
m6=np.dot(m4,m5) ;print("B) m6(array)=",m6,"\n")
#######################################################
m1=np.array([[1],
[2],
[3]])
m2=np.array([4,5,6])
m3=np.dot(m1.T,m2) ;print("C) m3(array)=",m3,"\n")
#######################################################
m1=np.matrix([[1],
[2],
[3]])
m2=np.matrix([4,5,6])
m3=np.dot(m1,m2) ;print("D) m3(matrix)=",m3)

Vielen Dank

Re: Matrizenmultiplikation

Verfasst: Freitag 2. September 2022, 12:53
von Sirius3
Dass das Matrixprodukt einer transponierten Matrix im Normalfall etwas anderes ergibt als bei einer nicht-transponierten Matrix, sollte eigentlich klar sein. Du mußt den Fehler richtig beheben, wenn Du ihn falsch behebst, kommt ein falsche Ergebnis raus.

Der eigentliche Unterschied zwischen np.matrix und np.array ist, dass np.array beliebig viele Dimensionen haben kann, eine Matrix aber immer genau zwei.
Und bei eindimensionalen Arrays muß halt np.dot entscheiden, wie daraus etwas zwei-Dimensionales wird, und die Konvention, die dort gewählt worden ist, gefällt Dir halt für Deinen speziellen Anwendungsfall nicht, für viele andere Anwendungsfälle ist aber das das logischste. In Deinem Fall mußt Du halt explizit sagen, wie aus dem Array etwas zweidimensionales werden soll:

Code: Alles auswählen

m1.dot(np.atleast_2d(m2))

Re: Matrizenmultiplikation

Verfasst: Freitag 2. September 2022, 13:01
von Kobra23759
Danke für die erklärenden Worte