【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)等集成在一块芯片上的微型计算机。单片机因其体积小、成本低、功能强…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
