迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的余弦相似度

作者:迹忆客 最近更新:2023/12/21 浏览次数:

余弦相似度通过计算两个向量列表之间的余弦角来衡量向量列表之间的相似度。如果考虑余弦函数,它在 0 度时的值为 1,在 180 度时为 -1。这意味着对于两个重叠的向量,对于两个完全相反的向量,余弦值将是最大值和最小值。

在本文中,我们将计算两个大小相等的列表之间的余弦相似度。


使用 scipy 模块计算 Python 中两个列表之间的余弦相似度

来自 scipy 模块的 spatial.cosine.distance() 函数计算距离而不是余弦相似度,但为了实现这一点,我们可以从 1 中减去距离的值。

例如,

from scipy import spatial

List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine(List1, List2)
print(result)

输出:

0.9720951480078084

使用 NumPy 模块计算 Python 中两个列表之间的余弦相似度

numpy.dot() 函数计算作为参数传递的两个向量的点积。numpy.norm() 函数返回向量范数。

我们可以使用这些函数和正确的公式来计算余弦相似度。

例如,

from numpy import dot
from numpy.linalg import norm

List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = dot(List1, List2) / (norm(List1) * norm(List2))
print(result)

输出:

0.9720951480078084

如果有多个或一组向量和一个查询向量来计算余弦相似度,我们可以使用以下代码。

import numpy as np

List1 = np.array([[4, 45, 8, 4], [2, 23, 6, 4]])

List2 = np.array([2, 54, 13, 15])

similarity_scores = List1.dot(List2) / (
    np.linalg.norm(List1, axis=1) * np.linalg.norm(List2)
)

print(similarity_scores)

输出:

[0.98143311 0.99398975]

使用 sklearn 模块计算 Python 中两个列表之间的余弦相似度

sklearn 模块中,有一个名为 cosine_similarity() 的内置函数来计算余弦相似度。

请参考下面的代码。

from sklearn.metrics.pairwise import cosine_similarity, cosine_distances

A = np.array([10, 3])
B = np.array([8, 7])
result = cosine_similarity(A.reshape(1, -1), B.reshape(1, -1))
print(result)

输出:

[[0.91005765]]

使用 torch 模块计算 Python 中两个列表之间的余弦相似度

当我们处理具有形状 (m,n) 的 N 维张量时,我们可以使用 torch 模块中的 consine_similarity() 函数来查找余弦相似度。

例如,

import torch
import torch.nn.functional as F

t1 = [3, 45, 6, 8]
a = torch.FloatTensor(t1)

t2 = [4, 54, 3, 7]
b = torch.FloatTensor(t2)
result = F.cosine_similarity(a, b, dim=0)

print(result)

输出:

tensor(0.9960)

使用 torch.FloatTensor() 模块将列表转换为张量。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中将 NumPy 数组转换为列表

发布时间:2023/12/24 浏览次数:102 分类:Python

本教程演示了如何将 numpy 数组转换为 Python 中的列表。列表和数组是 Python 中两个最基本且最常用的集合对象。

Python 中追加二维数组

发布时间:2023/12/24 浏览次数:158 分类:Python

本教程讨论如何在 Python 中将值附加到二维数组。在 Python 中,我们可以有 ND 数组。我们可以使用 NumPy 模块在 Python 中处理数组。

在 Python 中将数组写入文本文件

发布时间:2023/12/24 浏览次数:68 分类:Python

本教程演示如何在 python 中将数组保存到文本文件中。读取和写入文件是构建许多用户使用的程序的一个重要方面。Python 提供了一系列可用于资源处理的方法。

Python 导出到 Excel

发布时间:2023/12/24 浏览次数:129 分类:Python

有四种主要方法可用于在 Python 中将数据写入 Excel 文件,DataFrame.to_excel() 方法、xlwt 库、openpyxl 库和 XlsWriter 库。

使用 Selenium Python 在浏览器中打开和关闭标签页

发布时间:2023/12/24 浏览次数:92 分类:Python

本教程演示了如何在 Python 中使用 Selenium 在浏览器中自动打开一个新标签页。Selenium 是强大的 Web 自动化和测试工具。我们使用 Selenium 编写脚本,它可以控制 Web 浏览器并执行特定操作。

Conda 安装 Cv2

发布时间:2023/12/24 浏览次数:106 分类:Python

本教程演示了如何在 Python 中为 anaconda 用户安装 cv2 模块。互联网上有许多可用的 Python IDE。一种这样的 Python IDE 是 Anaconda,这是一种开源软件

Python 中 NumPy 数组的滑动平均值

发布时间:2023/12/24 浏览次数:145 分类:Python

本教程演示了如何在 python 中计算 numpy 数组的滑动平均值。滑动平均值通常用于通过计算特定时间间隔的数据平均值来研究时间序列数据。

在 Python 中计算马氏距离

发布时间:2023/12/24 浏览次数:125 分类:Python

有两个主要方法可用于在 Python 中查找两个 NumPy 数组之间的马氏距离,scipy 库中的 cdist() 函数和 numpy 包中的 numpy.einsum() 函数。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便