Ich habe versucht, Matrix-Dot-Produkt zu tun und mit Numpy zu transponieren, und ich fand Array kann viele Dinge Matrix tun können, wie Punkt Produkt, Punkt Produkt und transponieren.Unterschiede zwischen Array-Klasse und Matrix-Klasse in numpy für Matrix-Operation
Wenn ich eine Matrix erstellen muss, muss ich zuerst ein Array erstellen.
Beispiel:
import numpy as np
array = np.ones([3,1])
matrix = np.matrix(array)
Da I transponierte Matrix tun kann und Skalarprodukt in Array-Typ, ich habe nicht Array in Matrix konvertieren Matrixoperationen zu tun.
Zum Beispiel kann die folgende Zeile gültig ist, wobei A ein ndarray:
dot_product = np.dot(A.T, A)
Die vorherige Matrixoperation mit Matrix Klassenvariable A
dot_product = A.T * A
Die ausgedrückt werden operator * ist genau dasselbe wie ein punktweises Produkt für ndarray. Daher macht es ndarray und Matrix fast ununterscheidbar und verursacht Verwechslungen.
Die Verwirrung ist ein ernstes Problem, wie in REP465 sagte
Schreiben von Code mit numpy.matrix funktioniert auch gut. Aber Ärger beginnt als bald, wenn wir versuchen, diese zwei Teile des Codes zusammen zu integrieren. Code , der ein ndarray erwartet und eine Matrix abruft oder umgekehrt, kann abstürzen oder falsche Ergebnisse zurückgeben. Nachverfolgen, welche Funktionen erwarten, die als Eingaben eingeben und welche Typen als Ausgaben zurückgeben, und dann immer wieder hin und her konvertieren, ist unglaublich umständlich und unmöglich, in jedem Maßstab richtig zu kommen.
Es wird sehr verlockend sein, wenn wir ndarray haften und deprecate Matrix und Unterstützung ndarray mit Matrixoperationsmethoden wie .inverse(), .hermitian(), Dyadisches Produkt(), usw., in der Zukunft.
Der Hauptgrund, warum ich noch Matrix Klasse verwenden muss ist, dass es 1D-Array als 2D-Array behandelt, damit ich es transponieren kann.
Es ist sehr unbequem so weit, wie ich 1d Array transponiere, da 1d Array der Größe n Form (n,) statt (1, n) hat. Wenn beispielsweise I das innere Produkt von zwei Arrays zu tun haben:
A = [[1,1,1],[2,2,2].[3,3,3]]
B = [[1,2,3],[1,2,3],[1,2,3]]
np.dot (A, B) funktioniert gut, aber wenn
B = [1,1,1]
, ihre Transponierte ist noch ein Zeilenvektor .
Ich muss diese Ausnahme behandeln, wenn die Dimensionen der Eingabevariablen unbekannt ist.
Ich hoffe, dass dies einige Menschen mit den gleichen Schwierigkeiten helfen, und hoffe zu wissen, ob es eine bessere Möglichkeit gibt, Matrix-Betrieb wie in Matlab, vor allem mit 1d-Array zu behandeln. Vielen Dank.
Danke, das ist sehr hilfreich. Ich denke, wir können sagen, Matrix-Klasse sollte veraltet sein, da ndarray vielseitiger zu sein scheint? – Vespa