What Is Difference Between The Function Numpy.dot(), @, And Method .dot() For Matrix-matrix Multiplication?
Solution 1:
They are almost identical with a few exceptions.
a.dot(b)
and np.dot(a, b)
are exactly the same. See numpy.dot
and ndarray.dot
.
However, looking at the documentation of numpy.dot
:
If both a and b are 2-D arrays, it is matrix multiplication, but using
matmul
ora @ b
is preferred.
a @ b
corresponds to numpy.matmul(a, b)
. dot
and matmul
differ as follows:
matmul
differs fromdot
in two important ways:
- Multiplication by scalars is not allowed, use
*
instead.- Stacks of matrices are broadcast together as if the matrices were elements, respecting the signature
(n,k),(k,m)->(n,m)
:
>>>a = np.ones([9, 5, 7, 4])>>>c = np.ones([9, 5, 4, 3])>>>np.dot(a, c).shape (9, 5, 7, 9, 5, 3)>>>np.matmul(a, c).shape (9, 5, 7, 3)>>># n is 7, k is 4, m is 3
Solution 2:
They are all basically doing the same thing. In terms of timing, based on Numpy's documentation here:
If both a and b are 1-D arrays, it is inner product of vectors (without complex conjugation).
If both a and b are 2-D arrays, it is matrix multiplication, but using
matmul
ora @ b
is preferred.If either a or b is 0-D (scalar), it is equivalent to multiply and using
numpy.multiply(a, b)
ora * b
is preferred.If a is an N-D array and b is a 1-D array, it is a sum product over the last axis of
a
andb
.
Post a Comment for "What Is Difference Between The Function Numpy.dot(), @, And Method .dot() For Matrix-matrix Multiplication?"