【Python】使用Numpy实现余弦相似度计算
本文详细介绍了如何使用 NumPy 实现两个向量之间的余弦相似度计算,帮助理解向量相似度在推荐系统、文本处理等领域的应用。
1. 余弦相似度定义
余弦相似度是衡量两个向量在高维空间中夹角大小的指标,其公式为:
c o s ( θ ) = A ⋅ B ∥ A ∥ ∥ B ∥ {cos(\theta)} = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} cos(θ)=∥A∥∥B∥A⋅B
其中:
- A ⋅ B A⋅B A⋅B 表示向量的点积,即 A 1 B 1 + A 2 B 2 + . . . + A n B n A_1B_1+A_2B_2+...+A_nB_n A1B1+A2B2+...+AnBn
- ∥ A ∥ ∥A∥ ∥A∥ 和 ∥ B ∥ ∥B∥ ∥B∥ 是向量的 L2 范数(即欧几里得长度)
如果 A = [ 1 , 2 , 3 ] A=[1,2,3] A=[1,2,3] B = [ 2 , 3 , 4 ] B=[2,3,4] B=[2,3,4] 则有:
- A ⋅ B = 1 ∗ 2 + 2 ∗ 3 + 3 ∗ 4 = 20 A⋅B =1*2+2*3+3*4=20 A⋅B=1∗2+2∗3+3∗4=20
- ∥ A ∥ = 1 2 + 2 2 + 3 2 ∥A∥=\sqrt{1^2+2^2+3^2} ∥A∥=12+22+32
- ∥ B ∥ = 2 2 + 3 2 + 4 2 ∥B∥ = \sqrt{2^2+3^2+4^2} ∥B∥=22+32+42
余弦相似度的取值范围为 [-1, 1]:
- 1 表示两个向量方向完全相同。
- 0 表示两个向量正交(没有相关性)。
- −1 表示两个向量方向完全相反。
2. Python Numpy实现
代码实现:
import numpy as np
def cosine_similarity(vec1, vec2):# 计算点积dot_product = np.dot(vec1, vec2)norm_a = np.linalg.norm(vec1)norm_b = np.linalg.norm(vec2)# 防止分母为0if norm_a == 0 or norm_b == 0:return 0.0# 余弦相似度return dot_product/(norm_a * norm_b)
3. 扩展:矩阵形式计算余弦相似度
代码实现:
def batch_cosine_similarity(matrix_a, matrix_b):"""计算两个矩阵中对应向量之间的余弦相似度:param matrix_a: 矩阵 A (m x d):param matrix_b: 矩阵 B (n x d):return: 相似度矩阵 (m x n)"""norm_a = np.linalg.norm(matrix_a, axis=1, keepdims=True)norm_b = np.linalg.norm(matrix_b, axis=1, keepdims=True)similarity_matrix = np.dot(matrix_a, matrix_b.T) / (norm_a * norm_b.T)return similarity_matrix
实际应用:
- 在文本分析中,如果两个文本的余弦相似度接近 1,说明这两篇文本内容相似;而如果相似度接近 0,则说明文本之间没有明显的联系。
- 在推荐系统中,用户的行为向量与商品的描述向量的余弦相似度可以帮助计算推荐结果。
- 在图像处理领域,计算图像特征向量之间的余弦相似度也可以用于检索相似图像。
- 余弦相似度也可以用于信号分析,表示两个信号的波形相似性。例如,某些电子设备的状态诊断可能基于当前信号与历史信号的余弦相似度。
相关文章:
【Python】使用Numpy实现余弦相似度计算
本文详细介绍了如何使用 NumPy 实现两个向量之间的余弦相似度计算,帮助理解向量相似度在推荐系统、文本处理等领域的应用。 1. 余弦相似度定义 余弦相似度是衡量两个向量在高维空间中夹角大小的指标,其公式为: c o s ( θ ) A ⋅ B ∥ A ∥…...
nginx中的root和alias的区别
alias 在E:\\test\\目录下创建一个index.html文件 在nginx.conf文件配置alias,路径填写为绝对路径,但是要注意,这里结尾是文件夹的名字 然后下面的/aa/ 是随便起的名字,也不是文件夹的名字,在浏览器访问的使用的 在浏览器使用 …...
探索Telnet:实现Windows远程登录Ubuntu的实践指南
前言 在互联网技术日新月异的今天,远程登录已经成为许多开发者和系统管理员日常工作中不可或缺的一部分。虽然SSH已经成为远程登录的首选协议,但了解并掌握Telnet这一经典协议仍然具有重要意义。本文将带您一起探索如何使用Telnet实现Windows远程登录Ub…...
在 Vue 2 中隐藏页面元素的方法
目录 在 Vue 2 中隐藏页面元素的方法 引言 1. 使用 v-if 指令 2. 使用 v-show 指令 3. 使用自定义类名与 v-bind:class 4. 使用内联样式与 v-bind:style 5. 使用组件的 keep-alive 和条件渲染 在 Vue 2 中隐藏页面元素的方法 引言 在开发 Web 应用时,我们经…...
【Java】Java8的4个函数式接口简单教程
什么是函数是接口? 函数式接口是一个包含 单个抽象方法 的接口,且可以有任意多个默认方法或静态方法。为了增强可读性,Java 8 引入了 FunctionalInterface 注解,用于标识该接口是一个函数式接口,编译器会帮助我们检查…...
计算机组成原理与系统结构——微程序控制
笔记内容及图片整理自XJTUSE “计算机组成原理与系统结构” 课程ppt,仅供学习交流使用,谢谢。 基本概念 微指令 将控制单元实现为基本逻辑单元之间的互连并非易事,且设计相对呆板,难以灵活地改变,因此实现微程序控制…...
【Swift】集合类型 - 数组、集合、字典
文章目录 集合的可变性数组数组类型简写语法创建空数组使用默认值创建数组通过合并两个数组创建一个新数组使用数组字面量创建数组访问和修改数组 Swift 提供了三种主要的 集合类型,分别是数组、集合和字典,用于存储值集合。数组是有序的值集合。集合是无…...
3D 视觉定位技术:汽车零部件制造的智能变革引擎
在汽车零部件制造领域,传统工艺正面临着前所未有的挑战。市场对于零部件精度与生产效率近乎苛刻的要求,促使企业寻求突破之道。而 3D 视觉定位技术,为汽车零部件制造开启了精准定位与智能化生产的新纪元。 3D 视觉定位系统的核心技术原理 3…...
操作系统的基本认识
操作系统的感性认识 操作系统这个词可能或多或少听说过,比如windows, linux, macOS。这些其实都是工程师们经过实践后的具象化产物。而操作系统原理这六个字就是操作系统的抽象化,更准确的说,操作系统原理是很理论化的东西。举一个不是很恰当…...
使用pycharm连接远程服务器
使用pycharm连接远程服务器 1.在你的项目里配置 SSH ,放到服务器上去跑 主机为服务器的IP地址,输入用户名和密码 配置项目位置、选择编译器 2.设置本地更改代码保存后即上传到服务器 在本地使用 pycharm 调试代码,pycharm 上面的代码更改…...
【Linux SH脚本】LinuxCheck 应急检查信息脚本
LinuxCheck 1.下载地址 【Linux SH脚本】LinuxCheck 应急检查信息脚本 2.简介 LinuxCheck 是一个开源的自动化检查脚本,旨在快速检测 Linux 系统的安全配置和潜在问题。它支持多种发行版,能够扫描并生成详细的报告,涵盖用户管理、权限配置…...
apifox创建一个mock接口
1、新建接口 2、选择mock,开启云端mock; 3、新建期望; 4、编辑响应体; 5、快速请求,测试; (主要可能是网络问题,也可以自己python mock一个;apifox简单快速…...
设计一个基础JWT的多开发语言分布式电商系统
在设计一个分布式电商系统时,保证系统的可扩展性、性能以及跨语言的兼容性是至关重要的。随着微服务架构的流行,越来越多的电商系统需要在多个服务间共享信息,并且保证服务的安全性。在这样的场景下,JSON Web Token(JW…...
委托(Delegate)与事件(Event)-(上篇)
C#中的委托(Delegate)是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法,并且可以用来实现回调机制。委托是C#中实现事件处理、异步编程以及面向对象设计模式的重要工具之一。在C#中,委托被定义为引用类型…...
Scala根据身份证前两位数判断地区
方法一 val id "339005200101010928"// 取出id前两位 val province id.substring(0, 2) /*//println(province)if (province "42") {println("湖北")}else if (province "11") {println("北京")}else if (province &qu…...
freeswitch(开启支持视频H264通话)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景介绍: 内部默认是不支持的,视频通话,需要开启模块使用方法: 第一步:进入vars.xml 下面找到global_codec_prefs和outbound_codec_pr…...
启发式搜索算法和优化算法的区别
启发式搜索算法和优化算法在计算机科学中都有广泛的应用,但它们之间存在一些明显的区别。 一、定义与核心思想 启发式搜索算法 定义:启发式搜索算法是一类基于经验和直觉的问题求解方法,通过观察问题的特点,并根据某种指…...
数据结构初阶---二叉树---堆
一、树 1.树的概念 树是一种非线性的数据结构,由n(n≥0)个有限结点组成的一个有层次关系的集合。形状类似一棵倒挂的树,根朝上,分支向下。 根结点没有前驱结点,可以有n(n≥0)个后继结点。 其余结点被分为M个互不相交的集合&am…...
微信小程序中 crypto-js 加解密全攻略
一、引言 在微信小程序开发中,数据的安全至关重要。加解密技术在保护用户数据和应用程序的安全性方面起着关键作用。小程序在与服务器进行数据交互时,面临着数据泄露、篡改等安全风险。为了确保用户信息的安全,选择合适的加解密算法变得尤为…...
单片机的软件开发环境
单片机(Microcontroller Unit, MCU)是一种将计算机系统中的中央处理器(CPU)、存储器(Memory)、输入输出接口(I/O)等集成在一块芯片上的微型计算机。单片机因其体积小、成本低、功能强…...
基于Python + LLM的AI客服协作系统设计与实现
🧑💻 博主介绍 & 诚邀关注 作者:专注于 Java、Python、前端开发的技术博主 | 全网粉丝 30 万 在校期间协助导师完成毕业设计课题分类、论文格式初审及代码整理工作;工作后持续分享毕设思路,助力毕业生顺利完成…...
API调用总失败?ChatGPT官方Rate Limit机制深度拆解,4类高频报错代码级诊断手册
更多请点击: https://kaifayun.com 第一章:API调用总失败?ChatGPT官方Rate Limit机制深度拆解,4类高频报错代码级诊断手册 ChatGPT API 的速率限制(Rate Limit)并非黑盒策略,而是由 OpenAI 明确…...
Docker 部署实战:前端应用容器化指南
Docker 部署实战:前端应用容器化指南 什么是 Docker? Docker 是一个开源平台,用于开发、部署和运行应用程序。它使用容器化技术,将应用程序及其依赖打包在一个独立的容器中。 Docker 的优势 一致性:开发环境与生产环境…...
C++ 重载与重写的区别与实现
1 . 前言在面向对象语言中,经常提到重载与重写,以下内容直观描述两者差异成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同;…...
GRETNA脑网络分析工具包:MATLAB中的图论网络分析终极指南
GRETNA脑网络分析工具包:MATLAB中的图论网络分析终极指南 【免费下载链接】GRETNA A Graph-theoretical Network Analysis Toolkit in MATLAB 项目地址: https://gitcode.com/gh_mirrors/gr/GRETNA GRETNA(Graph-theoretical Network Analysis To…...
LLM语言大模型的企业应用案例
本文系统梳理 2025-2026 年国内外 7 款主流大语言模型(LLM)在企业中的成功部署案例,覆盖金融、汽车、旅游、政务、医疗五大行业,每个案例均包含部署步骤、数据准备、改善效果数字及经验教训,为企业 AI 落地提供可借鉴的…...
Qt串口通信与STM32 PWM实战:滑动条控制RGB灯全流程解析
1. 项目概述与核心价值最近在做一个智能家居控制面板的原型,核心需求之一就是通过一个直观的图形界面,去实时调节RGB氛围灯的亮度和颜色。这听起来像是把手机App上的功能搬到了嵌入式设备上,但背后的实现链路却完全不同。我选择了Qt作为上位机…...
AI Agent 编排框架比较:LangChain vs LlamaIndex vs Agent Info
AI Agent 编排框架比较:LangChain vs LlamaIndex vs Agent Info 前言 随着 AI Agent 的流行,出现了多个优秀的编排框架。选择合适的框架对于构建高效的 Agent 系统至关重要。 我在项目中使用过多个 Agent 框架,对它们的特点和适用场景有深入理…...
保姆级教程:在Vue3项目中用ZLMediaKit+WebRTC实现超低延迟监控直播(附完整代码)
Vue3WebRTC超低延迟监控直播实战指南 在实时视频监控领域,延迟是衡量系统性能的核心指标之一。传统RTSP流媒体方案在Web端实现时,往往面临秒级甚至更长的延迟,这在对实时性要求极高的安防监控、工业检测等场景中成为致命短板。本文将深入探讨…...
大规模矩阵SVD与GSVD计算方法【附代码】
✨ 长期致力于办公建筑设计、建筑能耗、光性能、热性能、modeFRONTIER、多目标优化、性能模拟、寒冷地区研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1ÿ…...
