2016-05-19 2 views
0

Я хочу осуществить следующий расчет в Python: Python Dot-продукт с матричными элементами

С и .

Здесь являются самими матрицами. Таким образом, python должен вычислять умножение матрицы-времени-вектора, где вектор-элементы являются матрицами. Возможно ли это без цикла for?

+0

Ist эс möglich им английская ца erklär;)? –

+0

да, извините за это;) – refle

+0

E всегда [1, 1; 1, -1] или может быть произвольным? – kennytm

ответ

3

Использование NumPy:

In [1]: import numpy as np 

In [2]: M1 = np.array([[1, 2], [3, 4]]) 

In [3]: M2 = np.array([[10, 20], [30, 40]]) 

In [4]: E = np.array([[1, 1], [1, -1]]) 

In [5]: v = np.array([M1, M2]) 

In [6]: np.tensordot(E, v, 1) 
Out[6]: 
array([[[ 11, 22], 
     [ 33, 44]], 

     [[ -9, -18], 
     [-27, -36]]]) 
+3

Эквивалент 'einsum' - это' np.einsum ('ij, jkl-> ikl', E, v) '. – hpaulj

+0

Спасибо, @hpaulj. Я знал, что это будет какой-то «einsum» способ сделать это, но не знал этого с моей головы. –

+0

Я бы немного поболтал; симметрия 'E' делает' ij' v 'ji' неоднозначной. Но ваш выбор параметра '1' имеет наибольший смысл (последний из' E', первый из 'v'). – hpaulj

0

, если вы знакомы с Эйнштейном суммирования нотации, вы можете себе представить, как E индексируются E_ij и v, как v_jkl и вообще писать np.tensordot в @ стив-Керна пример как:

In [6]: np.einsum('ij,jkl',E,v)

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