2016-12-16 13 views
1

나는 모양이 (t,3) 인 시계열 및 형태가 (3,3,t) 인 회전 행렬의 시계열을 가지고 있는데, 여기서 t 시계열의 길이입니다. 각 시간에 좌표의 내적을 찾고 싶습니다 t 회전 할 때마다 회전 행렬이 t이므로 회전 된 좌표 인 (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) 
내가 파이썬의 단일 라인 루프이를 대체 할 수있는 방법

? 나는 np.tensordot의 다양한 순열을 시도했지만 성공하지 못했습니다. 일반적인 형식

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

모양 - -

답변

2

당신은 np.einsum을 사용할 수 있습니다

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

두 가지 고려 사항이 적용되었다 - 첫 번째 (축)의

  • 합계 감소 rotation의 최하위는 input_coords입니다.
  • rotation의 마지막을 유지하고 input_coords의 첫 번째를 정렬합니다. 이는 중첩 루프 내에서 Ci이 사용되는 방식과 일치합니다.