scipy 如何计算列表之间的余弦相似度?

vhmi4jdf  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(168)

下面的代码:

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))

但是它失败了。我们的想法是计算ab上的余弦相似度,得到一个列表,如下所示:

[0.97..., 0.97..., 0.97...]

我可以简单地这样做吗?或者我需要使用for

wwwo4jvm

wwwo4jvm1#

您需要更改几项内容:首先,当使用dot()时,第一个数组的最后一个维度需要与第二个数组的倒数第二个维度相匹配,因此在您的情况下,您可能需要dot(a, b.T)。然后,为了计算b中每个组成数组的范数,而不是将b作为矩阵来计算,您需要norm(b, axis=1)。将这些放在一起,您可能应该使用dot(a, b.T) / (norm(a) * norm(b, axis=1))

相关问题