有什么区别吗?如果不是,按惯例首选什么? 性能似乎几乎相同。
geneID1 A C C C C C
geneID2 T T T T T T
答案 0 :(得分:2)
他们基本上都在做同一件事。在计时方面,根据Numpy的文档here:
如果a和b都是一维数组,则它是向量的内积 (没有复杂的共轭)。
如果a和b均为二维数组,则为矩阵乘法,但是
最好使用matmul
或a @ b
。
如果a或b为0-D(标量),则等于乘和
最好使用numpy.multiply(a, b)
或a * b
。
如果a是一个N-D数组而b是一维数组,则它是
a
和b
的最后一个轴。
答案 1 :(得分:2)
它们几乎相同,只是有一些例外。
a.dot(b)
和np.dot(a, b)
完全相同。参见numpy.dot
和ndarray.dot
。
但是,请查看numpy.dot
的文档:
如果a和b均为二维数组,则为矩阵乘法,但最好使用
matmul
或a @ b
。
a @ b
对应于numpy.matmul(a, b)
。 dot
和matmul
的区别如下:
matmul
与dot
在两个重要方面不同:
- 不允许使用标量进行乘法运算,而应使用
*
。- 将矩阵堆栈一起广播,就好像矩阵是 元素,尊重签名
(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