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

问题描述 投票:1回答:2

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

a=np.random.rand(1000,1000)
b=np.random.rand(1000,1000)
%timeit a.dot(b)     #14.3 ms ± 374 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit np.dot(a,b)  #14.7 ms ± 315 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit a @ b        #15.1 ms ± 779 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
python numpy matrix-multiplication
2个回答
2
投票

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

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

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

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

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


2
投票

它们几乎相同,除了一些例外。

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

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

如果a和b均为二维数组,则为矩阵乘法,但最好使用ndarray.dotnumpy.dot

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

[numpy.matmul(a, b)dot的区别在两个重要方面:

  • 不允许进行标量乘法,请改用matmul
  • 将矩阵堆栈一起广播,就好像矩阵是元素,尊重签名matmul
dot
© www.soinside.com 2019 - 2024. All rights reserved.