欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

向量与矩阵、矩阵与矩阵的余弦相似度

程序员文章站 2022-07-12 09:28:45
...

向量与矩阵、矩阵与矩阵的余弦相似度

很简单,将公式套上就行了。
向量与矩阵、矩阵与矩阵的余弦相似度

python 代码

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

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(arr, brr):
    return arr.dot(brr.T) / (np.sqrt(np.sum(arr*arr)) * np.sqrt(np.sum(brr*brr)))


# 向量与矩阵的余弦相似度
def vector_matrix(arr, brr):
    return arr.dot(brr.T) / (np.sqrt(np.sum(arr*arr, axis=1)) * np.sqrt(np.sum(brr*brr, axis=1)))


# 矩阵与矩阵的余弦相似度
def matrix_matrix(arr, brr):
    return arr.dot(brr.T).diagonal() / ((np.sqrt(np.sum(arr*arr, axis=1))) * np.sqrt(np.sum(brr*brr, axis=1)))


print(vector_vector(a, a))
print(vector_matrix(a, b))
print(matrix_matrix(b, c))

输出结果

[[1.]]
[[1.         1.         0.68376346 0.85941947]]
[1.         0.87369775 1.         1.        ]```