有什么区别吗?如果不是,按照惯例首选什么?
性能看起来几乎是一样的。
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)
除了一些例外,它们几乎相同。
a.dot(b)
and np.dot(a, b)
完全相同。看numpy.dot and ndarray.dot.
但是,查看文档numpy.dot
:
如果a和b都是二维数组,则为矩阵乘法,但使用matmul
or a @ b
是优选的。
a @ b
对应于numpy.matmul(a, b). dot
and 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)