坐标时间序列与旋转矩阵时间序列的点积

Dot product of a time series of co-ordinates with a time series of rotation matrices

我有一个形状为 (t,3) 的航天器坐标时间序列,以及一个形状为 (3,3,t) 的旋转矩阵时间序列,其中 t 是时间序列的长度。我想在每个时间 t 找到坐标与每个时间 t 的旋转矩阵的点积,这样我就得到了一个数组shape (t,3) 即旋转后的坐标。

我可以通过编写以下代码在 for 循环中实现此目的:

new_coords = np.zeros_like(input_coords)
for Ci, Vi in enumerate(input_coords):
    new_coords[Ci,:] = np.tensordot(Vi, rotation[:,:,Ci], axes = 1)

如何用一行 Python 替换这个 for 循环?我已经尝试了 np.tensordot 的各种排列但没有成功。

可以使用np.einsum-

np.einsum('ijk,ki->kj',rotation, input_coords)

通用格式的形状 -

rotation     : 3 x 3 x N
input_coords : N x 3

这里应用了两个注意事项 -

  • rotation 的第一个(轴)与 input_coords 的最后一个(轴)的和减少。
  • 保持 rotation 的最后一个和 input_coords 的第一个对齐。这与在嵌套循环中使用 Ci 的方式一致。