Numpy 计算 3D 矩阵内部数组的点积

Numpy compute dot product of the inner array of a 3D matrix

我有两个数组,如下所示:

在代码中是:

t = np.random.rand(6, 6, 2)

我现在想为轴 0 和轴 1 数组的每个条目计算轴 2 数组(形状 2 的数组)的点积。

我可以用 for 循环来完成:

Q = np.zeros_like(t)
for i in range(6):
    for j in range(6):
        Q[i,j] = t[i,j].dot(t[i,j])

如何使用 numpy 函数执行此操作?

我无法使用 .dot.tensordot 或类似的方法...

t.dot(t) 产生此错误 ValueError: shapes (6,6,2) and (6,6,2) not aligned: 2 (dim 2) != 6 (dim 1) 这是可以预料的,但我想规避它。

由于您将所有行的 dot 乘积与自身相乘,因此您可以简化为 t 与自身的乘积并将结果相加。为了与 t 具有相同的形状,您可以使用 np.broadcast_to:

np.broadcast_to((t*t).sum(-1)[...,None], t.shape)

更新

根据评论,您似乎只需要:

(t*t).sum(-1)

检查:

np.allclose(Q, np.broadcast_to((t*t).sum(-1)[...,None], t.shape))
# True

我使用 np.einsum:

np.einsum("...i, ...i", t, t)

它产生与我的 for 循环相同的输出。