下面的代码:
import numpy as np
from numpy import dot
from numpy.linalg import norm
a = np.array([3, 45, 7, 2])
b = np.array([[2, 54, 13, 15], [2, 54, 13, 14], [2, 54, 13, 13]])
cos_sim = dot(a, b)/(norm(a)*norm(b))
但是它失败了。我们的想法是计算a
在b
上的余弦相似度,得到一个列表,如下所示:
[0.97..., 0.97..., 0.97...]
我可以简单地这样做吗?或者我需要使用for
?
1条答案
按热度按时间wwwo4jvm1#
您需要更改几项内容:首先,当使用
dot()
时,第一个数组的最后一个维度需要与第二个数组的倒数第二个维度相匹配,因此在您的情况下,您可能需要dot(a, b.T)
。然后,为了计算b
中每个组成数组的范数,而不是将b
作为矩阵来计算,您需要norm(b, axis=1)
。将这些放在一起,您可能应该使用dot(a, b.T) / (norm(a) * norm(b, axis=1))
。