Я пытаюсь эффективно вычислить сумму сходства косинусов, но мой текущий метод довольно медленный.
Предположим, у меня есть три вектора v_1
, V_2
и v_3
. Есть ли более эффективный способ вычисления суммы косинусных сходств, кроме простого выполнения следующих действий: Cos(v_1,v_2) + Cos(v_1,v_3) + Cos(v_2,v_3)
?
Я бы хотел избежать распараллеливания, если это возможно.
Ниже приведен грубый пример моего текущего метода:
import numpy as np
def cosine_sim(A,B):
dot = np.dot(A, B)
norma = np.linalg.norm(A)
normb = np.linalg.norm(B)
cos = dot / (norma * normb)
return cos
vectors = np.array([
[1,0,1,1,1,0,0,1,0,0,1,0,1],
[1,0,1,0,1,1,0,1,0,1,1,0,0],
[0,1,0,1,0,1,0,0,0,1,1,0,0]
])
_sum =0
for i in range(len(vectors)):
for j in range(i+1, len(vectors)):
_sum += cosine_sim(vectors[i], vectors[j])