2016-12-16 63 views
1

我有時間序列的形狀爲(t,3)的航天器座標,以及形狀爲(3,3,t)的時間序列旋轉矩陣,其中t是時間序列的長度。我想要找到在每個時間點的座標的點積,其中每個時間點的旋轉矩陣爲t,使得我獲得形狀爲(t,3)的陣列,其是旋轉座標。與時間序列旋轉矩陣的時間系列座標的點積

我可以寫在實現這一目標的循環:

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的各種排列沒有成功。

回答

2

您可以使用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的方式一致。