计算矩阵中的所有余弦相似度

时间:2019-12-23 15:36:36

标签: python numpy scikit-learn vectorization cosine-similarity

说我有一个矩阵stock = {} for warehouse in warehouses: stock[warehouse] = [] for row in results: stock[warehouse].append(row[0]) fruit_list = [fruit for warehouse in stock.values() for fruit in warehouse] duplicates = {fruit for fruit in set(fruit_list) if fruit_list.count(fruit) > 1} for fruit in duplicates: print(fruit + " is a duplicate") final_result = {warehouse:[fruit for fruit in fruits if fruit not in duplicates] for warehouse,fruits in stock.items()} mat数组。

我的问题是双重的:

  1. 如何计算第一行与其他所有行的余弦相似度?我尝试使用100 x 200的{​​{1}}函数,但是传入sklearn矩阵会给我一个cosine_similarity数组(而不是100 x 200数组)。

  2. 如果我想计算所有行相对于其他行的余弦相似度,比如说计算所有行的所有100 C 2 = 4950个不同组合,那么使用类似100 x 100的东西,但实际上通过100 x 1存储每一行​​的范数,然后通过cos_sim = dot(a, b)/(norm(a)*norm(b))计算每个相似度?

1 个答案:

答案 0 :(得分:1)

1-尝试:

cosines = (numpy.inner(mat[0], mat) / (numpy.linalg.norm(mat[0]) * numpy.linalg.norm(mat, axis=1)))

2-您可以检查先前的代码以了解类似情况

numpy.linalg.norm(mat, axis=1)

计算所有向量的范数,然后将每一步乘以当前向量。 也

numpy.inner(mat, mat)

将为您提供矩阵内积的对称矩阵。