Python Numpy dot()函数的等价项
这个问题纯粹是出于好奇。假设我有两个矩阵a和b 为了找到他们的点积,我可以使用np.dota,b。但是,还有其他方法可以做到这一点吗?我没有要求任何其他别名函数。但也许还有另一种方法,比如np.suma*b,axis=1,我知道这是行不通的,这只是一个例子。如果我有一个三维矩阵呢?有没有其他方法可以不用任何函数来计算他们的点积 提前谢谢Python Numpy dot()函数的等价项,python,numpy,matrix,matrix-multiplication,Python,Numpy,Matrix,Matrix Multiplication,这个问题纯粹是出于好奇。假设我有两个矩阵a和b 为了找到他们的点积,我可以使用np.dota,b。但是,还有其他方法可以做到这一点吗?我没有要求任何其他别名函数。但也许还有另一种方法,比如np.suma*b,axis=1,我知道这是行不通的,这只是一个例子。如果我有一个三维矩阵呢?有没有其他方法可以不用任何函数来计算他们的点积 提前谢谢 In [66]: a=np.array([[1, 2], ...: [2, 3], ...: [
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)
您可以使用@运算符:a@b.Furthermorenp.multiply不会产生矩阵乘法。@Willem Van Onsem我要求的是一个数学等价物,而不是另一个运算符或函数。添加一点广播很容易。想想你需要乘和乘的维度sum@hpaulj你能说得更具体一点,把你的答案贴出来吗?
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)