What is difference between the function numpy.dot(), @, and method .dot() for matrix-matrix multiplication?

…衆ロ難τιáo~ 提交于 2020-03-23 08:19:35

问题


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,1000)
%timeit a.dot(b)     #14.3 ms ± 374 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit np.dot(a,b)  #14.7 ms ± 315 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit a @ b        #15.1 ms ± 779 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

回答1:


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 or a @ b is preferred.

  • If either a or b is 0-D (scalar), it is equivalent to multiply and using numpy.multiply(a, b) or a * 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 and b.




回答2:


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 or a @ b is preferred.

a @ b corresponds to numpy.matmul(a, b). dot and matmul differ as follows:

matmul differs from dot 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


来源:https://stackoverflow.com/questions/59416178/what-is-difference-between-the-function-numpy-dot-and-method-dot-for-ma

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!