我正在尝试有效地计算余弦相似度之和,但是我目前的方法相当慢。
考虑到我有三个向量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])