Is there any difference? If not, what is preferred by convention? The performance seems to be almost the same.
a=np.random.rand(1000,1000)
b=np.random.rand(1000,
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
matmulora @ bis preferred.
a @ b corresponds to numpy.matmul(a, b). dot and matmul differ as follows:
matmuldiffers fromdotin 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