Найти минимальное косинусное расстояние между двумя матрицами
У меня два 2Dnp.arrays
давайте назовем ихA
а такжеB
оба имеют форму. Для каждого вектора в 2D массивеA
Мне нужно найти вектор в матрицеB
, которые имеют минимальное расстояние косинуса. Для этого у меня просто есть двойной цикл for, внутри которого я пытаюсь найти минимальное значение. Так что в основном я делаю следующее:
from scipy.spatial.distance import cosine
l, res = A.shape[0], []
for i in xrange(l):
minimum = min((cosine(A[i], B[j]), j) for j in xrange(l))
res.append(minimum[1])
В приведенном выше коде один цикл скрыт за пониманием. Все работает нормально, но двойной цикл for делает его слишком медленным (я пытался переписать его с двойным пониманием, что делало вещи немного быстрее, но все же медленно).
Я считаю, что есть функция numpy, которая может быстрее достичь следующего (используя некоторую линейную алгебру).
Так есть ли способ добиться того, чего я хочу быстрее?