矩阵矩阵乘法的函数numpy.dot(),@和方法.dot()之间有什么区别?

时间:2019-12-19 19:58:00

标签: python numpy matrix-multiplication

有什么区别吗?如果不是,按惯例首选什么? 性能似乎几乎相同。

geneID1 A   C   C   C   C   C  
geneID2 T   T   T   T   T   T

2 个答案:

答案 0 :(得分:2)

他们基本上都在做同一件事。在计时方面,根据Numpy的文档here

  • 如果a和b都是一维数组,则它是向量的内积 (没有复杂的共轭)。

  • 如果a和b均为二维数组,则为矩阵乘法,但是 最好使用matmula @ b

  • 如果a或b为0-D(标量),则等于乘和 最好使用numpy.multiply(a, b)a * b

  • 如果a是一个N-D数组而b是一维数组,则它是 ab的最后一个轴。

答案 1 :(得分:2)

它们几乎相同,只是有一些例外。

a.dot(b)np.dot(a, b)完全相同。参见numpy.dotndarray.dot

但是,请查看numpy.dot的文档:

  

如果a和b均为二维数组,则为矩阵乘法,但最好使用matmula @ b

a @ b对应于numpy.matmul(a, b)dotmatmul的区别如下:

  

matmuldot在两个重要方面不同:

     
      
  • 不允许使用标量进行乘法运算,而应使用*
  •   
  • 将矩阵堆栈一起广播,就好像矩阵是   元素,尊重签名(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