我有
a = np.ones((10, 4, 3))
b = np.ones((10, 3, 5))
而且我要
c = np.dot(a, b, axis=0)
assert c.shape == (10, 4, 5)
我该怎么做呢?
据我了解,有10个a
形状为4 x 3的矩阵和10b
个形状为3 x 5的矩阵,并且您希望对两个集合中的对应矩阵进行(矩阵乘)乘运算。
如前所述,np.matmul(a, b)
还是a @ b
达到了这个目的。但是,如果操作不清楚,则可以查看一种明确的方法来实现所需的功能np.einsum
,该方法可以像在数学中那样明确指定索引:
np.einsum('ijl,ilk->ijk', a, b)
在第一个参数的字符串中,左侧指定输入矩阵的索引,右侧指定输出索引。阅读文档以更好地理解它。
只是为了检查结果是否相同:
>>> np.allclose(np.einsum('ijl,ilk->ijk', a, b), a @ b)
True
但是einsum
需要更多时间,因此对于这种简单的用法,明智的做法是@
:
>>> %timeit np.einsum('ijl,ilk->ijk', a, b)
%timeit a @ b
14.2 µs ± 176 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
2.73 µs ± 22.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句