文章目录
 
 
一. 余弦相似度计算
 
 
二. 向量与矩阵、矩阵与矩阵的余弦相似度
 
 
三. 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)
 
四. 参考文献