Python 中的余弦相似度
余弦相似度通过计算两个向量列表之间的余弦角来衡量向量列表之间的相似度。如果考虑余弦函数,它在 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()
模块将列表转换为张量。
相关文章
在 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,这是一种开源软件
使用 OpenCV solvepnp() 函数解决 PnP 问题
发布时间:2023/12/24 浏览次数:85 分类:Python
-
本教程讨论在 Python 中使用 OpenCV 中的 solvepnp 函数。OpenCV 库是一个开源库,旨在帮助完成计算机视觉任务。
Python 中 NumPy 数组的滑动平均值
发布时间:2023/12/24 浏览次数:145 分类:Python
-
本教程演示了如何在 python 中计算 numpy 数组的滑动平均值。滑动平均值通常用于通过计算特定时间间隔的数据平均值来研究时间序列数据。
在 Python 中计算马氏距离
发布时间:2023/12/24 浏览次数:125 分类:Python
-
有两个主要方法可用于在 Python 中查找两个 NumPy 数组之间的马氏距离,scipy 库中的 cdist() 函数和 numpy 包中的 numpy.einsum() 函数。