如何使用numpy的einsum取子数组的点积?

How to use numpy's einsum to take the dot product of an subarray?

我有一个有 3 个轴的数组:

a = [[[1,2,3], [4,5,6], [7,8,9]], 
     [[9,8,7], [6,5,4], [3,2,1]],
     [[1,1,1], [2,2,2], [3,3,3]]]

而且我想使用 einsum 以非迭代方式获取 'a' 中每个向量与矩阵的点积:

m = [[a, b, c],
     [d, e, f],
     [g, h, i]]

像这样

product = [[dot(m,a[1,1,:]), dot(m,a[1,2,:]), dot(m,a[1,3,:])],
           [dot(m,a[2,1,:]), dot(m,a[2,2,:]), dot(m,a[2,3,:])],
           [dot(m,a[3,1,:]), dot(m,a[3,2,:]), dot(m,a[3,3,:])]]

得到一个与初始数组'a'形状相同的数组。我一直在尝试使用 einsum,但就是无法正常工作。

这应该可以解决问题,假设您是 'dotting' m 的最后一个维度和 a 的最后一个维度:

np.einsum('ij,klj->ikl',m,a)