我正在尝试理解这段优化代码,用于查找用户矩阵之间的余弦相似度。
def fast_similarity(ratings,epsilon=1e-9):
# epsilon -> small number for handling dived-by-zero errors
sim = ratings.T.dot(ratings) + epsilon
norms = np.array([np.sqrt(np.diagonal(sim))])
return (sim / norms / norms.T)
如果 ratings =
items
u [
s [1,2,3]
e [4,5,6]
r [7,8,9]
s ]
norms将等于= [1^2 + 5^2 + 9^2]
但是为什么我们要写sim/norms/norms.T来计算余弦相似度呢?任何帮助都将不胜感激。