微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算多对向量的点积的更好方法?

如何解决计算多对向量的点积的更好方法?

我有两个数组 A 和 B 形状 (N,3);我需要计算一个数组 C),形状为 (N,1,使得 C[i]=A[i].B[i],i in range(N)。现在我正在做

import numpy as np
...
C = np.array([np.dot(a,b) for a,b in zip(A,B)]

有没有更快的方法

解决方法

这是一种解决方案。不知道有没有更好的。

>>> A = np.random.randint(0,10,(3,3))
>>> A
array([[5,7,8],[6,1,2]])
>>> B = np.random.randint(0,3))
>>> B
array([[3,[2,6,0],[1,1]])
>>>
>>> np.dot(A[0],B[0])
86
>>> np.dot(A[1],B[1])
54
>>> np.dot(A[2],B[2])
14
>>>
>>> np.sum(A * B,axis=1)
array([86,54,14])

编辑:有一个更好的解决方案。使用 np.einsum

>>> np.einsum("ij,ij->i",A,B)
array([86,14])

我以前从未真正使用过 einsum,但一直都知道它。很酷的功能。使用爱因斯坦符号。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。