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

前端 未结 2 524
深忆病人
深忆病人 2021-01-22 04:25

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,         


        
2条回答
  •  青春惊慌失措
    2021-01-22 04:47

    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
    

提交回复
热议问题