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?