首页 > 解决方案 > 带有 numpy 的矢量化内积

问题描述

我需要为存储在 numpy 数组中的向量计算许多内积。

也就是说,用数学术语来说,

V i = Σ k A i,k B i,k

C i,j = Σ k A i,k D i,j,k

我当然可以使用循环,但我想知道我是否可以使用更高级别的运算符,dot或者matmul以我没有想到的巧妙方式。困扰我的是它np.cross确实接受要执行的向量数组,但dot不做inner我想做的事。

标签: pythonnumpylinear-algebra

解决方案


您的数学公式已经为您提供了使用np.einsum. 它很简单:

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

转换为V[i] = sum(A[i][k]*B[i][k]).

C = np.einsum('ik,ijk->ij', A, D)

IE C[i][j] = sum(A[i][k]*D[i][j][k]

您可以在其他问题上阅读有关einsum操作员的更多信息。


推荐阅读