向量与矩阵、矩阵与矩阵的余弦相似度 |
文章目录
一. 余弦相似度计算
二. 向量与矩阵、矩阵与矩阵的余弦相似度
三. Python具体实现
3.1. 向量与向量
import numpy as np
a = np.array([1, 2, 1, 2, 3, 5, 6, 2])
b = np.array([1, 2, 1, 4, 6, 5, 5, 2])
print(a.shape, b.shape)
def vector_vector(a, b):
""" 向量与向量之间的余弦相似性 """
return np.dot(a, b) / (np.linalg.norm(a)*np.linalg.norm(b))
vector_vector(a, b)
3.2. 向量与矩阵
import numpy as np
a = np.array([1, 2, 1, 2, 3, 5, 6, 2])
B = np.array([
[1, 2, 1, 2, 3, 5, 6, 2],
[1, 2, 1, 2, 3, 5, 6, 2],
[2, 3, 3, 2, 1, 2, 1, 1],
[2, 2, 1, 1, 1, 2, 4, 4]
])
print(a.shape, B.shape)
def vector_vector(a, B):
""" 向量与矩阵之间的余弦相似性 """
return np.dot(B, a) / (np.linalg.norm(a) * np.linalg.norm(B, axis=1))
vector_vector(a, B)
3.3. 矩阵与矩阵
import numpy as np
B = np.array([
[1, 2, 1, 2, 3, 5, 6, 2],
[1, 2, 1, 2, 3, 5, 6, 2],
[2, 3, 3, 2, 1, 2, 1, 1],
[2, 2, 1, 1, 1, 2, 4, 4]
])
C = np.array([
[1, 2, 1, 2, 3, 5, 6, 2],
[2, 1, 1, 2, 1, 2, 3, 3],
[2, 3, 3, 2, 1, 2, 1, 1],
[2, 2, 1, 1, 1, 2, 4, 4]
])
def vector_vector(A, B):
""" 矩阵与矩阵之间的余弦相似性 """
return np.dot(A, B.T).diagonal() / (np.linalg.norm(A, axis=1) * np.linalg.norm(B, axis=1))
vector_vector(B, C)