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
Matrizenmultiplikation
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:
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))
-
- User
- Beiträge: 61
- Registriert: Donnerstag 9. April 2020, 18:47
Danke für die erklärenden Worte