Encontre a distância mínima de cosseno entre duas matrizes

Eu tenho dois 2Dnp.arrays vamos chamá-losA eB, ambos tendo a forma. Para cada vetor na matriz 2DA Eu preciso encontrar o vetor na matrizB, que possuem a distância mínima do cosseno. Para fazer isso, só tenho um loop for duplo no qual tento encontrar o valor mínimo. Então, basicamente, eu faço o seguinte:

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])

No código acima, um dos loop está oculto por trás de uma compreensão. Tudo funciona bem, mas o loop for torna muito lento (tentei reescrevê-lo com uma compreensão dupla, o que tornava as coisas um pouco mais rápidas, mas ainda lentas).

Eu acredito que existe uma função numpy que pode alcançar o seguinte mais rapidamente (usando alguma álgebra linear).

Então, existe uma maneira de conseguir o que eu quero mais rápido?

questionAnswers(2)

yourAnswerToTheQuestion