Мне нужно вычислить векторное скалярное произведение соответствующих строк двух двумерных массивов u
и v
в numpy. Строки u
являются единичными векторами. Вот пример кода, который иллюстрирует то, что я пытаюсь сделать:
import numpy as np
u = np.array([[1, 0], [.6, .8], [0, 1]])
v = np.array([[1, 2], [3 , 4], [5, 6]])
Я наивно пытался использовать метод dot
numpy, который возвращает следующую ошибку:
np.dot(u, v)
ValueError Traceback (most recent call last)
<ipython-input-9-146fe9079c1e> in <module>
----> 1 np.dot(u,v)
<__array_function__ internals> in dot(*args, **kwargs)
ValueError: shapes (3,2) and (3,2) not aligned: 2 (dim 1) != 3 (dim 0)
Несложно определить функцию, которая производит желаемое поведение:
def mydot(a, b):
return np.sum(a*b,axis=1,keepdims=True)
mydot(u,v)
array([[1.],
[5.],
[6.]])
Однако это кажется немного неуклюжим и оставляет у меня подозрение, что мне не хватает что-то. Есть ли более простой numpy способ сделать это?