gpt4 book ai didi

python - 如何在 NumPy 中有效计算列式外向量

转载 作者:太空宇宙 更新时间:2023-11-03 15:57:51 25 4
gpt4 key购买 nike

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

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

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

最佳答案

我通常调用einsum在这种情况下可以轻松进行矢量化:

>>> 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

这样我们就可以明确我们希望每个坐标发生什么,同时仍然比循环更快:

>>> %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

关于python - 如何在 NumPy 中有效计算列式外向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40601372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com