Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy dot()函数的等价项_Python_Numpy_Matrix_Matrix Multiplication - Fatal编程技术网

Python Numpy dot()函数的等价项

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], ...: [

这个问题纯粹是出于好奇。假设我有两个矩阵a和b

为了找到他们的点积,我可以使用np.dota,b。但是,还有其他方法可以做到这一点吗?我没有要求任何其他别名函数。但也许还有另一种方法,比如np.suma*b,axis=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)

您可以使用@运算符: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)