如何使用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)
我有一个有 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)