2016-06-30 3 views
1

У меня 2 набора векторов n*mx_ij и y_ij размерности d хранится в двух np.ndarrayX и Y формы n*m*d. Я хочу получить матрицу скалярных продуктов n*mx_ij.y_ij. На данный момент я делаю это так:Элегантная пара мудр скалярное произведение многих векторов в NumPy

(X.T.reshape((d,m*n)) * Y.T.reshape((d,n*m))).sum(axis=0).reshape((m,n)).T 

Это работает, но чувствует нелицеприятную/дилетантский, чем это должно быть. Есть ли более элегантный способ сделать эту операцию?

+0

Вы не должны быть размещены на этот вопрос Просмотр Кода? :) http://stackoverflow.com/questions/42334719/simplifying-looped-numpy-operations – hpaulj

+0

@hpaulj да, ... мой комментарий был до того, как он уточнил его потребности :) – Julien

+0

Pot ... kettle ... – luckytaxi

ответ

1

Ну, вы держите первые две оси выровненными и суммирующими последние оси на обоих входах. Для такого случая, один эффективный способ решить это было бы с np.einsum, как так -

np.einsum('ijk,ijk->ij',X,Y) 
Смежные вопросы