gpt4 book ai didi

python - 取两个向量列表的 "element-wise"点积比 numpy.einsum 更快的替代方法?

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:32 25 4
gpt4 key购买 nike

假设您有两个向量数组:

v1 = np.array([ [1, 2], [3, 4] ])v2 = np.array([ [10, 20], [30, 40]])

我们想生成一个等价于的数组:

v3 = np.array([ np.dot(v1[0], v2[0]), np.dot(v1[1], v2[1]) ])

目前我使用:

v3 = np.einsum('ij,ij->i', v1, v2)

但是,我在我的代码中经常这样做,所以这里的加速对我来说非常有帮助。

我们怎样才能加快速度? np.einsum 已经相当高效了,但我想知道对于这个特定用例,是否有更快的方法?

最佳答案

einsum 做了我能想到的 3 个选项中最好的:

In [73]: timeit v3=np.einsum('ij,ij->i',v1,v2)
100000 loops, best of 3: 5.14 us per loop

In [74]: timeit np.diag(np.dot(v1,v2.T))
100000 loops, best of 3: 7.43 us per loop

In [75]: timeit np.sum(v1*v2,axis=1)
100000 loops, best of 3: 16.8 us per loop

几个问题要问:

  • 这个计算真的那么昂贵吗?
  • 如果相对昂贵,您是否必须经常这样做?
  • 您能否合并 einsum 调用 - 连接数组?

关于python - 取两个向量列表的 "element-wise"点积比 numpy.einsum 更快的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24237658/

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