2017-02-08 24 views
0

Я хочу, чтобы умножить два больших матриц, а затем взять только диагональные элементы полученной матрицы:Как установить ограничения на индексы с участием разных тензоров в Theano?

m1[i, j] = sum_k A[i, k] * B[k, j] 
m2[i] = m1[i, i] 

Я могу сделать это таким образом. Тем не менее, это делает много ненужных операций. Лучший способ сделать это будет:

m[i, i] = sum_k A[i, k] * B[k, i] 

Есть ли способ «заставить» сделать это вторым способом?

+0

Есть ли проблема с do sum где 'i == j'? – Arman

+0

@Arman, если я делаю это сам в цикле, проблем нет. Тем не менее, я хотел бы использовать команды Theano (tensordot). – Roman

+0

Вы имеете в виду 'numpy.tensordot'? – Arman

ответ

0

Решение:

T.sum(a * b.dimshuffle(1,0), axis = 1) 

Объяснение:

К «пара» индексы первого тензора с индексами тензора второго мы можем использовать попарное умножение. В этом случае все размеры первого тензора будут сопряжены со всеми соответствующими размерами второго тензора. Однако, чтобы это сделать, нам может потребоваться изменить порядок измерений, поскольку i-ые измерения первого тензора всегда сопряжены с i-м измерением второго тензора. Итак, используйте транспонирование в конкретных описанных случаях.

После элемента умножения умножения вы можете sum в некоторых измерениях.

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

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