Ich habe zwei Matrizen
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
und ich möchte das elementweise Produkt [[1*5,2*6], [3*7,4*8]]
gleich bekommen
[[5,12], [21,32]]
Ich habe versucht
print(np.dot(a,b))
und
print(a*b)
aber beide geben das Ergebnis
[[19 22], [43 50]]
Das ist das Matrixprodukt, nicht das elementweise Produkt. Wie kann ich das elementweise Produkt (auch bekannt als Hadamard-Produkt) mithilfe integrierter Funktionen erhalten?
a
undb
nicht NumPys Matrixtyp? Gibt mit dieser Klasse*
das innere Produkt zurück, nicht elementweise. Aber für die üblichendarray
Klasse*
bedeutet elementartiges Produkt.a
undb
numpy Arrays? In Ihrer obigen Frage verwenden Sie außerdemx
undy
zur Berechnung anstelle vona
undb
. Ist das nur ein Tippfehler?@
Matrixmultiplikation mit Numpy-Arrays verwenden können. Dies bedeutet, dass es absolut keinen guten Grund geben sollte, Matrizen über Arrays zu verwenden.a
undb
sind Listen. Sie werden arbeiten innp.dot
; aber nicht ina*b
. Wenn Sienp.array(a)
oder verwendennp.matrix(a)
,*
funktioniert dies jedoch mit unterschiedlichen Ergebnissen.Antworten:
Für die elementweise Multiplikation von
matrix
Objekten können Sie Folgendes verwendennumpy.multiply
:Ergebnis
Sie sollten jedoch wirklich
array
anstelle von verwendenmatrix
.matrix
Objekte haben alle möglichen schrecklichen Inkompatibilitäten mit normalen Ndarrays. Mit ndarrays können Sie nur die*
elementweise Multiplikation verwenden:Wenn Sie mit Python 3.5+ arbeiten, verlieren Sie nicht einmal die Fähigkeit, eine Matrixmultiplikation mit einem Operator durchzuführen, da
@
die Matrixmultiplikation jetzt funktioniert :quelle
mach das einfach:
quelle
*
scheint der Operator eine elementweise Multiplikation durchzuführen .Beides
np.multiply
und*
würde eine elementweise Multiplikation ergeben, die als Hadamard-Produkt bekannt ist%timeit
ist Ipython Magiequelle
Versuche dies:
Hier wird
np.array(a)
ein 2D-Array vom Typ zurückgegeben,ndarray
und eine Multiplikation von zweindarray
würde zu einer elementweisen Multiplikation führen. Das Ergebnis wäre also:Wenn Sie eine Matrix erhalten möchten, gehen Sie folgendermaßen vor:
quelle