2016-12-16 14 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? Я пробовал различные перестановки np.tensordot без успеха.

ответ

2

Вы можете использовать np.einsum -

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

Форму в универсальном формате -

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

Два соображения были применены там -

  • Sum-восстановительные первых (оси) из rotation с последним input_coords.
  • Сохранение последних rotation и первое input_coords выровнено. Это соответствует тому, как Ci используется в вложенном цикле.

 Смежные вопросы

  • Нет связанных вопросов^_^