首页 > 解决方案 > 计算多维numpy数组元素的内点积

问题描述

计算多维 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, :])]])

这是一个例子:

a = np.arange(8).reshape(2, 2, 2)
b = np.arange(8).reshape(2, 2, 2)

预期结果:

array([[ 1, 41],
       [13, 85]])

标签: pythonnumpyscipy

解决方案


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

(a*b).sum(-1).T
array([[ 1, 41],
       [13, 85]])

推荐阅读