首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NumPy中有效地计算列向外向量

如何在NumPy中有效地计算列向外向量
EN

Stack Overflow用户
提问于 2016-11-15 03:08:38
回答 1查看 239关注 0票数 1

假设矩阵A具有m x r大小,而B具有n x r。在NumPy中,如何在AB之间进行列级外积?

也就是说,我想要一个矩阵,C (大小:m x n x r),其中C[:, :, i]A[:, i]B[:, i]的外部乘积。

当然,我可以在列上使用for循环,但是我想知道是否有一种矢量化的方法来加快计算速度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 03:21:35

在这种情况下,我通常会调用einsum以便于矢量化:

代码语言:javascript
复制
>>> m,n,r = 30,50,70
>>> A = np.random.random((m,r))
>>> B = np.random.random((n,r))
>>> C = np.einsum('ik,jk->ijk', A, B)
>>> C2 = np.dstack([np.outer(A[:,i], B[:,i]) for i in range(r)])
>>> C.shape
(30, 50, 70)
>>> np.allclose(C, C2)
True

这样,我们就可以清楚地知道我们希望在每个坐标上发生什么,同时仍然比循环更快:

代码语言:javascript
复制
>>> %timeit C = np.einsum('ik,jk->ijk', A, B)
The slowest run took 4.83 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 216 µs per loop

>>> %timeit C2 = np.dstack([np.outer(A[:,i], B[:,i]) for i in range(r)])
100 loops, best of 3: 2.08 ms per loop
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40601372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档