Я пытаюсь вычислить скалярное произведение между двумя матрицами для каждой пары строк. У меня есть матрица D
с (u x 2)
размерами и матрица R с (u*2 x c)
размерами. Ниже приведен пример:
D = np.array([[0.02747092, 0.11233295],
[0.02747092, 0.07295284],
[0.01245856, 0.19935923],
[0.01245856, 0.13520913],
[0.11233295, 0.07295284]])
R = np.array([[-3. , 0. , 1. , -1. ],
[-1.25 , 0.75 , 1.75 , -1.25 ],
[-2.33333333, -0.33333333, 1.66666667, -1.33333333],
[-1.25 , 0.75 , 1.75 , -1.25 ],
[ 0. , -2. , 2. , -4. ],
[-1.25 , 0.75 , 1.75 , -1.25 ],
[ 0.66666667, -3.33333333, 2.66666667, -4.33333333],
[-1.25 , 0.75 , 1.75 , -1.25 ],
[-2.33333333, -0.33333333, 1.66666667, -1.33333333],
[-3. , 0. , 1. , -1. ]])
Результатом должна быть матрица M с размерами (u x c)
, как показано ниже (пример первой строки):
M = np.array([[-0.2185, 0.0825, 0.2195, -0.1645],
[...]])
Что является результатом dot
product между первой строкой D
и первыми двумя строками матрицы R
как таковой:
D_ = np.array([[0.027, 0.11]])
R_ = np.array([[-3., 0., 1., -1.],
[-1.25, 0.75, 1.75, -1.25]])
D_.dot(R_)
Я пробовал различные способы np.tensordot
после преобразования матрицы D
в тензор, но без каких-либо удачи. Я ищу векторизованное решение и избегаю петель (что является моим текущим решением, довольно медленным).