2017-01-10 4 views
2

В numpy у меня есть массив матриц N 3x3. Это будет примером того, как я их хранения (я абстрагируясь от содержания):Множественное умножение матрицы

N = 10 
matrices = np.ones((N, 3, 3)) 

У меня есть массив из 3-векторов, это будет пример:

vectors = np.ones((N, 3)) 

я не могу показаться, чтобы выяснить, как умножать те через NumPy, чтобы добиться чего-то вроде этого:

result_vectors = [] 
for matrix, vector in zip(matrices, vectors): 
    result_vectors.append(matrix @ vector) 

с формой result_vector «s (при литье в массив) является (N, 3). Однако реализация списка исключается из-за скорости.

Я пробовал np.dot с различными транспозициями, но конечный результат не получил правильную форму.

ответ

1

Применение np.einsum -

np.einsum('ijk,ik->ij',matrices,vectors) 

Шаги:

1) Держите первые оси выровненные.

2) Суммируйте последние оси от входных массивов друг против друга.

3) Пусть оставшиеся оси (вторая ось от matrices) умножаются на элементы.

+0

Похоже, что 'matmul' может использоваться с небольшим размером массирования:' (matrices @ vectors [:,:, None]). Squeeze() ' – hpaulj

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