Mik*_*kin 2 python numpy matrix-multiplication
有什么区别吗?如果不是,那么约定俗成的首选是什么?性能似乎几乎相同。
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)
Run Code Online (Sandbox Code Playgroud)
除了少数例外,它们几乎相同。
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):Run Code Online (Sandbox Code Playgroud)>>> 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
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |