Numpy dot()函数等效

时间:2018-11-11 19:50:11

标签: python numpy matrix matrix-multiplication

这个问题仅仅是出于好奇。假设我有两个矩阵ab

a=np.array([[1, 2],
            [2, 3],
            [4, 5]])

b=np.array([[1, 2, 3, 4],
            [2, 3, 4, 5]])

要找到他们的点积,我可以使用np.dot(a,b)。但是还有其他方法吗?我没有要求任何其他别名功能。但是,也许可以使用另一种方式来完成此操作,例如np.sum(a*b, axis=1)(我知道那是行不通的,这只是一个示例)。如果我有一个3-D矩阵怎么办?是否还有其他方法可以计算其点积(不使用任何函数)?

谢谢!

1 个答案:

答案 0 :(得分:1)

In [66]: a=np.array([[1, 2],
    ...:             [2, 3],
    ...:             [4, 5]])
    ...: 
    ...: b=np.array([[1, 2, 3, 4],
    ...:             [2, 3, 4, 5]])
    ...: 
    ...:             
In [67]: np.dot(a,b)
Out[67]: 
array([[ 5,  8, 11, 14],
       [ 8, 13, 18, 23],
       [14, 23, 32, 41]])
In [68]: a@b
Out[68]: 
array([[ 5,  8, 11, 14],
       [ 8, 13, 18, 23],
       [14, 23, 32, 41]])
In [69]: np.einsum('ij,jk',a,b)
Out[69]: 
array([[ 5,  8, 11, 14],
       [ 8, 13, 18, 23],
       [14, 23, 32, 41]])

广播的乘法和求和:

In [71]: (a[:,:,None]*b[None,:,:]).sum(axis=1)
Out[71]: 
array([[ 5,  8, 11, 14],
       [ 8, 13, 18, 23],
       [14, 23, 32, 41]])
In [72]: (a[:,:,None]*b[None,:,:]).shape
Out[72]: (3, 2, 4)