Matrizenmultiplikation

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kobra23759
User
Beiträge: 61
Registriert: Donnerstag 9. April 2020, 18:47

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
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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))
Kobra23759
User
Beiträge: 61
Registriert: Donnerstag 9. April 2020, 18:47

Danke für die erklärenden Worte
Antworten