【问题标题】:how to calculate the dot product of two arrays of vectors in python? [duplicate]如何计算python中两个向量数组的点积? [复制]
【发布时间】:2016-05-07 12:50:53
【问题描述】:

A and B 都是带有shape(N,3) 的数组。它们每个都包含 N 个向量,例如 A[0] = a0 (vector), A[1] = a1...B[0] = b0, B[1] = b1...

我想计算 N 对向量 an 和 bn 的点积。换句话说,我想获得一个带有shape(N,1) 的数组C,这样C[i] = np.dot(A[i],B[i]). 在python 中执行此操作的最有效方法是什么(例如使用矢量化代码)?

【问题讨论】:

  • 对于物理学家来说,在这个问题描述中挥手的次数令人惊讶。你试过什么,矢量化与否?小样本阵列会很好。 numpy dot 工具是np.dotnp.tensordotnp.einsum 和新的@

标签: python numpy scipy vectorization linear-algebra


【解决方案1】:

您可以执行逐元素乘法,然后沿第二个轴求和,就像这样 -

C = (A*B).sum(1)

这些乘法和求和运算可以用np.einsum一次性实现,就像这样-

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

np.matmul/@-operator -

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

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多