如何在Python中计算两个向量数组的点积?

6
A和B 都是形状为 (N,3) 的数组。它们每个都包含 N 个向量,例如 A[0] = a0 (vector), A[1] = a1...B[0] = b0, B[1] = b1...

我想要计算 N 对向量 an 和 bn 的点积。换句话说,我想要获取一个形状为 (N,1) 的数组 C,使得 C[i] = np.dot(A[i],B[i])。在 Python 中,最有效的方法是什么(例如使用矢量化代码)?


对于一个物理学家来说,在这个问题描述中有很多令人惊讶的手挥舞。你尝试过矢量化吗?提供一些小样本数组会很好。NumPy点工具包括np.dotnp.tensordotnp.einsum和新的@ - hpaulj
如果有人在问题提出7年后来到这里,einsum的想法是一个好主意,但我觉得文档有点令人困惑。我遇到了完全相同的问题:逐行计算N个向量的内积。为了使用einsum实现这一点,我发现这个方法可行np.einsum('...j,...j',A,B) - Goffredo Bosco
1个回答

11
你可以进行按元素逐个相乘,然后沿第二个轴求和,就像这样 -
C = (A*B).sum(1)

使用np.einsum,可以一次性地实现这些乘法和求和运算,方法如下 -

C = np.einsum('ij,ij->i',A,B)

使用np.matmul/@-运算符 -

(A[:,None,:] @ B[...,None]).ravel()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接