计算多维 numpy 数组元素的内点积

Ben*_*uet 4 python numpy scipy

计算多维 numpy 数组的“内部”点积的最优雅的方法是什么?

假设我有 2 个形状为 (2, 2, 2) 的数组ab(可以是 (n, n, 2) 且 n>= 2),我想用以下方法计算inner_dot(a, b)定义:

np.array([[np.dot(a[0, 0, :], b[0, 0, :]), np.dot(a[1, 0, :], b[1, 0, :])],
          [np.dot(a[0, 1, :], b[0, 1, :]), np.dot(a[1, 1, :], b[1, 1, :])]])
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

a = np.arange(8).reshape(2, 2, 2)
b = np.arange(8).reshape(2, 2, 2)
Run Code Online (Sandbox Code Playgroud)

预期结果:

array([[ 1, 41],
       [13, 85]])
Run Code Online (Sandbox Code Playgroud)

yat*_*atu 5

您可以直接将两个数组sum沿最后一个轴相乘。另外,由于您希望输出的右上角为np.dot(a[1, 0, :], b[1, 0, :]),而不是 和0,1大概以与非对角线元素相同的方式,您可以transpose得到预期的结果:

(a*b).sum(-1).T
array([[ 1, 41],
       [13, 85]])
Run Code Online (Sandbox Code Playgroud)