Ihre a * b.T
ist Element Multiplikation und funktioniert wegen broadcasting
. Addition und viele andere binäre Operationen arbeiten mit diesem Formenpaar.
a
ist (3,1). b.T
ist (1,2). Rundfunk verbindet (3,1) mit (1,2), um (3,2) zu erzeugen. Die Dimension der Dimension 1 wird angepasst, damit sie mit der anderen Dimension ungleich null übereinstimmt.
Sofern Sie keine Arrays mit np.matrix
erstellen, führt *
keine mathematische matrix multiplication
. np.dot
wird verwendet, um dies durchzuführen (@
und np.einsum
auch dies tun).
Mit dieser besonderen Kombination von Formen ist das dot
Produkt das gleiche. np.outer(a,b)
produziert auch dies, die mathematische outer product
. np.dot
entspricht der letzten Dimension von a
mit der 2. bis letzten Dimension von b.T
. In diesem Fall sind sie beide 1. dot
ist interessanter, wenn die gemeinsame Dimension mehrere Elemente hat, die bekannte sum of products
produzieren.
In [5]: np.dot(a, b.T)
Out[5]:
array([[ 4, 5],
[ 8, 10],
[12, 15]])
'äußeren' hinaus:
In [3]: a + b.T
Out[3]:
array([[5, 6],
[6, 7],
[7, 8]])
Es kann bei a
und b
wie folgt aussehen helfen:
In [7]: a
Out[7]:
array([[1],
[2],
[3]])
In [8]: b
Out[8]:
array([[4],
[5]])
In [9]: b.T
Out[9]: array([[4, 5]])
ich matrix
nicht verwenden in der Regel über numpy
Arrays zu sprechen es sei denn, sie werden mit np.matrix
oder häufiger scipy.sparse
erstellt. numpy
Arrays können 0d, 1d, 2d und höher sein. Ich achte mehr auf die Form als auf die Namen.
Wenn Sie a nach (3,1) und b nach (2,1) umgeformt haben. Dann sollte a * b.T zu (3,2) führen. 'a * b.T ~ = (3,1) * (1,2)'. Innere Dimensionen stimmen überein. Die resultierende Matrix wird also die äußeren Dimensionen 3 und 2 sein. Daher (3,2) – nikpod
Ich weiß, du meinst, aber wenn verwendet * bedeutet elementweise Multiplikation über Array, a & b sie Typ ist Array. Zum Beispiel wenn Sie c (Array-Typ) Shape ist (2, 3) * d (Array-Typ) Shape ist (3, 2) ist falsch, weil sie Form ist Unterschied. @ Nikod –