计算矩阵中的所有余弦相似度
Compute all cosine similarities in a matrix
假设我有一个矩阵 mat
和一个 100 x 200
数组。
我的问题是双重的:
如何计算第一行与所有其他行的余弦相似度?我尝试使用 sklearn
的 cosine_similarity
函数,但传入一个 100 x 200
矩阵给我一个 100 x 100
数组(而不是 100 x 1
数组)。
如果我想计算所有行与其他行的余弦相似度,比如说计算所有行的所有 100 C 2 = 4950 种不同组合,它会是最快的吗 not 使用 sklearn
之类的东西,但实际上通过 np.linalg.norm
存储每一行的范数,然后通过 cos_sim = dot(a, b)/(norm(a)*norm(b))
?
[= 计算每个相似度33=]
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)
会给你一个矩阵内积的对称矩阵。
假设我有一个矩阵 mat
和一个 100 x 200
数组。
我的问题是双重的:
如何计算第一行与所有其他行的余弦相似度?我尝试使用
sklearn
的cosine_similarity
函数,但传入一个100 x 200
矩阵给我一个100 x 100
数组(而不是100 x 1
数组)。如果我想计算所有行与其他行的余弦相似度,比如说计算所有行的所有 100 C 2 = 4950 种不同组合,它会是最快的吗 not 使用
[= 计算每个相似度33=]sklearn
之类的东西,但实际上通过np.linalg.norm
存储每一行的范数,然后通过cos_sim = dot(a, b)/(norm(a)*norm(b))
?
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)
会给你一个矩阵内积的对称矩阵。