当前位置: 首页 > article >正文

别再死记公式了!用NumPy和PyTorch实战理解向量点积(dot product)

用代码解锁向量点积从NumPy到PyTorch的实战指南当你第一次在机器学习教材中看到点积这个概念时是否感到困惑那些抽象的数学公式和符号往往让初学者望而却步。但事实上点积是深度学习中最基础也最重要的运算之一——从简单的相似度计算到复杂的注意力机制都离不开它。本文将带你通过Python代码亲手实现点积运算感受它在实际应用中的魅力。1. 点积的本质不只是数学公式教科书上对点积的定义通常是这样的对于两个向量a[a₁,a₂,...,aₙ]和b[b₁,b₂,...,bₙ]它们的点积是各对应分量乘积之和即a·ba₁b₁a₂b₂...aₙbₙ。但这个定义就像给你一张乐器的照片却从不让你听到它的声音。让我们用NumPy来听一下点积的声音import numpy as np # 定义两个简单的二维向量 vector_a np.array([3, 4]) vector_b np.array([1, 2]) # 计算点积 dot_product np.dot(vector_a, vector_b) print(f点积结果: {dot_product}) # 输出: 3*1 4*2 11这个简单的例子揭示了点积的第一个直观意义它衡量了两个向量的对齐程度。当向量方向更接近时点积值会更大当它们垂直时点积为零。注意在NumPy中np.dot()和np.inner()对于向量运算结果是相同的但在处理高维数组时行为不同这点我们稍后会讨论。2. NumPy中的点积实战2.1 用户相似度计算想象你正在构建一个推荐系统需要计算用户之间的相似度。点积在这里就派上了大用场# 用户对电影的评分动作片喜剧片爱情片 user1 np.array([5, 1, 2]) # 喜欢动作片 user2 np.array([3, 4, 3]) # 喜欢喜剧片 user3 np.array([4, 1, 1]) # 和user1口味相似 # 计算用户相似度 similarity_1_2 np.dot(user1, user2) # 5*3 1*4 2*3 154625 similarity_1_3 np.dot(user1, user3) # 5*4 1*1 2*1 201223 print(f用户1和用户2的相似度: {similarity_1_2}) print(f用户1和用户3的相似度: {similarity_1_3})虽然user1和user3的点积值略低但考虑到他们的评分模式更相似这个结果是有意义的。在实际应用中我们通常会先将向量归一化使它们的长度都为1这样点积就直接等于余弦相似度。2.2 几何视角下的点积点积还有一个重要的几何解释一个向量在另一个向量方向上的投影长度乘以被投影向量的长度。让我们用代码可视化这个特性import matplotlib.pyplot as plt # 定义两个向量 a np.array([3, 1]) b np.array([2, 3]) # 计算点积 dot np.dot(a, b) # 计算b在a方向上的投影长度 a_length np.linalg.norm(a) projection_length dot / a_length # 绘制向量和投影 plt.quiver(0, 0, a[0], a[1], anglesxy, scale_unitsxy, scale1, colorr, label向量a) plt.quiver(0, 0, b[0], b[1], anglesxy, scale_unitsxy, scale1, colorb, label向量b) plt.plot([b[0], projection_length*a[0]/a_length], [b[1], projection_length*a[1]/a_length], k--, label投影) plt.xlim(-1, 4) plt.ylim(-1, 4) plt.legend() plt.grid() plt.title(f点积值: {dot}) plt.show()运行这段代码你会清晰地看到点积与投影长度的关系。这种几何直观对于理解后续的注意力机制等概念至关重要。3. PyTorch中的点积与NumPy的异同PyTorch作为深度学习的主流框架其点积运算与NumPy有些许不同特别是在处理高维数据时。让我们通过几个关键对比来理解这些差异。3.1 向量点积的基本用法在PyTorch中计算两个向量的点积最直接的方法是使用torch.dot()import torch # 创建两个向量 v1 torch.tensor([1.0, 2.0, 3.0]) v2 torch.tensor([4.0, 5.0, 6.0]) # 计算点积 dot_result torch.dot(v1, v2) # 1*4 2*5 3*6 4 10 18 32 print(dot_result)这与NumPy的np.dot()在向量运算上行为一致。但当我们处理矩阵时差异就出现了。3.2 矩阵乘法与点积PyTorch提供了torch.mm()专门用于矩阵乘法而torch.dot()仅限于向量运算# 创建两个矩阵 m1 torch.tensor([[1.0, 2.0], [3.0, 4.0]]) m2 torch.tensor([[5.0, 6.0], [7.0, 8.0]]) # 矩阵乘法 matrix_product torch.mm(m1, m2) print(矩阵乘法结果:\n, matrix_product) # 错误的用法torch.dot()不能用于矩阵 try: torch.dot(m1, m2) except RuntimeError as e: print(f错误: {e})相比之下NumPy的np.dot()可以处理矩阵乘法这经常让初学者感到困惑。PyTorch的这种设计更加明确减少了潜在的误用。3.3 批量点积运算在深度学习中我们经常需要处理批量数据。PyTorch的torch.bmm()批量矩阵乘法和爱因斯坦求和约定提供了更灵活的点积计算方式# 批量矩阵乘法示例 (batch_size2, 2x3矩阵) batch1 torch.randn(2, 2, 3) batch2 torch.randn(2, 3, 4) # 批量矩阵乘法 result torch.bmm(batch1, batch2) # 结果形状: (2, 2, 4) print(批量矩阵乘法结果形状:, result.shape) # 使用爱因斯坦求和实现点积 a torch.tensor([1.0, 2.0, 3.0]) b torch.tensor([4.0, 5.0, 6.0]) dot_einsum torch.einsum(i,i-, a, b) print(爱因斯坦点积结果:, dot_einsum)这些高级用法在处理神经网络中的批量数据时非常有用特别是在实现自注意力机制时。4. 点积在深度学习中的实际应用4.1 简易推荐系统实现让我们用点积构建一个简单的电影推荐系统。假设我们有一组用户特征和电影特征通过计算它们的点积来预测用户可能喜欢的电影# 用户特征维度: [动作偏好, 喜剧偏好, 爱情偏好] users torch.tensor([ [5.0, 1.0, 2.0], # 用户1: 喜欢动作片 [2.0, 5.0, 1.0], # 用户2: 喜欢喜剧片 [1.0, 2.0, 5.0] # 用户3: 喜欢爱情片 ]) # 电影特征维度: [动作内容, 喜剧内容, 爱情内容] movies torch.tensor([ [4.0, 0.5, 1.0], # 动作片 [1.0, 4.0, 2.0], # 喜剧片 [0.5, 1.0, 5.0] # 爱情片 ]) # 计算所有用户对所有电影的评分 ratings torch.mm(users, movies.T) print(用户-电影评分矩阵:\n, ratings) # 为每个用户推荐评分最高的电影 recommendations torch.argmax(ratings, dim1) print(推荐电影索引:, recommendations)这个简单的例子展示了点积如何捕捉用户偏好和物品特征之间的匹配程度。在实际应用中这些特征通常是通过矩阵分解或深度学习模型学习得到的。4.2 注意力机制雏形点积是自注意力机制的核心运算。让我们实现一个简化的注意力计算def scaled_dot_product_attention(query, key, value): dim_k query.size(-1) scores torch.matmul(query, key.transpose(-2, -1)) / torch.sqrt(torch.tensor(dim_k)) attention_weights torch.softmax(scores, dim-1) return torch.matmul(attention_weights, value) # 示例: 3个token每个token有4维特征 queries torch.randn(3, 4) keys torch.randn(3, 4) values torch.randn(3, 4) attention_output scaled_dot_product_attention(queries, keys, values) print(注意力机制输出:\n, attention_output)这个简化版的注意力计算展示了点积如何用于衡量查询和键之间的相关性进而决定从值中提取多少信息。在Transformer模型中这种计算被并行化处理形成了强大的特征提取能力。5. 点积的性能优化技巧在实际工程实现中点积运算的性能至关重要。以下是几个优化建议批量处理尽可能使用批量矩阵运算而不是循环单个计算# 低效做法 results [] for a, b in zip(batch_of_as, batch_of_bs): results.append(torch.dot(a, b)) # 高效做法 batch_result torch.bmm(batch_of_as.unsqueeze(1), batch_of_bs.unsqueeze(2)).squeeze()利用广播机制PyTorch和NumPy都支持广播可以避免不必要的内存分配# 计算一组向量与一个中心向量的点积 vectors torch.randn(100, 64) # 100个64维向量 center torch.randn(64) # 利用广播自动扩展center向量 similarities torch.matmul(vectors, center.unsqueeze(1)).squeeze()混合精度训练对于支持CUDA的设备可以使用半精度浮点数加速计算with torch.cuda.amp.autocast(): # 这里的点积运算会自动使用半精度 output torch.matmul(half_precision_a, half_precision_b)选择正确的运算函数根据具体情况选择最合适的函数场景NumPy函数PyTorch函数向量点积np.dot()torch.dot()矩阵乘法np.dot()或torch.mm()或批量矩阵乘法np.einsum()torch.bmm()高维张量乘法np.tensordot()torch.einsum()

相关文章:

别再死记公式了!用NumPy和PyTorch实战理解向量点积(dot product)

用代码解锁向量点积:从NumPy到PyTorch的实战指南 当你第一次在机器学习教材中看到"点积"这个概念时,是否感到困惑?那些抽象的数学公式和符号,往往让初学者望而却步。但事实上,点积是深度学习中最基础也最重要…...

FireRedASR-AED-L场景应用:自媒体采访录音转文字稿的本地解决方案

FireRedASR-AED-L场景应用:自媒体采访录音转文字稿的本地解决方案 1. 引言:自媒体工作者的文字稿困境 作为一名自媒体从业者,我深知采访录音转文字的痛苦。每次采访结束后,面对长达数小时的录音文件,要么花费大量时间…...

我们的人生意义,不在远方的世俗成功里,就在我们日日生活的烟火人间里:父母至亲; 好好吃饭,好好生活,为人民服务

你 人生意义,藏在中国人的文化根脉里 目录 你 人生意义,藏在中国人的文化根脉里中国人的人生,从来不是孤岛,意义藏在“相与之情”的联结里中国人的安身立命,不靠彼岸神话,而在现世的“尽其在我”人生的终极…...

深度解析:Inpaint-web如何彻底改变浏览器端图像修复工作流?

深度解析:Inpaint-web如何彻底改变浏览器端图像修复工作流? 【免费下载链接】inpaint-web A free and open-source inpainting tool powered by webgpu and wasm on the browser. 项目地址: https://gitcode.com/GitHub_Trending/in/inpaint-web …...

Qwen3-Embedding-4B多场景落地:HR政策问答机器人、IT运维知识图谱补全、合同条款语义审查

Qwen3-Embedding-4B多场景落地:HR政策问答机器人、IT运维知识图谱补全、合同条款语义审查 1. 项目核心价值:重新定义语义搜索 传统的搜索引擎依赖关键词匹配,就像在图书馆里只能通过书名找书。而Qwen3-Embedding-4B带来的语义搜索&#xff…...

Astyle代码格式化工具:如何在VSCode中配置出最适合你的代码风格(附RT-thread配置示例)

Astyle代码格式化工具:在VSCode中打造个性化代码风格的完整指南 1. 为什么开发者需要代码格式化工具 在团队协作开发中,代码风格的一致性往往成为影响效率的关键因素。想象一下,当你接手一个由多位开发者共同维护的项目时,可能会遇…...

SEO_掌握这5个SEO核心技巧,轻松改善搜索排名

SEO(搜索引擎优化)是一个复杂而又极其重要的领域,特别是在数字营销中。掌握这些核心技巧,可以让你的网站在搜索结果中获得更高的排名,进而带来更多的流量和业务机会。本文将详细介绍五个核心的SEO技巧,帮助…...

Jellyfin转码性能翻倍?实测J4105核显开启GuC/HuC低电压模式全流程

Jellyfin硬件加速终极调优:Intel低功耗平台转码性能深度释放指南 在家庭媒体服务器的世界里,Jellyfin凭借其开源免费的特性赢得了大量用户的青睐。但对于使用Intel Gemini Lake系列低功耗处理器(如J4105/N5105)的用户来说&#xf…...

Stable Diffusion像素化控制技巧:Pixel Fashion Atelier预设咒语详解

Stable Diffusion像素化控制技巧:Pixel Fashion Atelier预设咒语详解 1. 像素艺术生成新体验 Pixel Fashion Atelier为Stable Diffusion用户带来了全新的像素艺术创作体验。这款基于Anything-v5模型的工作站,将复古日系RPG的视觉风格与现代AI图像生成技…...

芯片验证工程师必看:如何用IPO原则高效分解Testpoints(附模板下载)

芯片验证工程师实战指南:IPO原则驱动的Testpoints分解方法论 1. 芯片验证的核心挑战与IPO原则的价值 面对动辄上千页的芯片规格文档,验证工程师常陷入两难困境:既要保证验证覆盖率,又要在有限时间内完成验证任务。传统方法往往导…...

FFMpegCore实战踩坑记:从Windows部署到Linux Docker,我的配置血泪史

FFMpegCore实战踩坑记:从Windows部署到Linux Docker,我的配置血泪史 开发环境里跑得欢,生产环境里泪两行——这大概是我最近用FFMpegCore做音视频处理项目最真实的写照。作为一个.NET开发者,本以为把本地测试通过的代码扔到服务器…...

PROJECT MOGFACE在网络安全领域的应用:模拟攻击与智能安全报告生成

PROJECT MOGFACE在网络安全领域的应用:模拟攻击与智能安全报告生成 最近和几个做安全的朋友聊天,他们都在抱怨同一个问题:每天面对海量的漏洞扫描数据,光是梳理攻击路径、写评估报告就要花掉大半天时间,真正分析风险、…...

AI系统应急响应弹性伸缩配置:架构师实战:基于指标的自动扩缩容触发阈值设计

1. 标题 (Title) 以下是5个吸引人的标题选项,突出核心关键词与实战价值: 《AI系统“弹性大脑”:架构师手把手教你设计基于指标的自动扩缩容触发阈值》《告别“资源浪费”与“响应延迟”:AI系统弹性伸缩阈值设计实战指南》《从“…...

FLUX.1-dev旗舰版性能对比:与Stable Diffusion 3的基准测试

FLUX.1-dev旗舰版性能对比:与Stable Diffusion 3的基准测试 1. 引言 AI图像生成领域最近迎来了一场重量级对决。Black Forest Labs开源的FLUX.1-dev旗舰版与Stability AI的Stable Diffusion 3,这两个由同一技术团队不同分支打造的模型,究竟…...

IxChariot Tcl API避坑指南:从环境搭建到脚本调试的常见问题解决

IxChariot Tcl API避坑指南:从环境搭建到脚本调试的常见问题解决 在性能测试领域,IxChariot凭借其强大的流量模拟能力和丰富的测试指标,成为网络设备、应用系统性能验证的利器。而Tcl API的引入,则为自动化测试提供了高效途径。然…...

Random Notes

本文包含:故事 + C/Python 代码 + Mermaid 流程图 Heres an English translation of your original essay, keeping the tone and style as close as possible. Feel free to post it on CSDN under your name. Random Notes March 24, 2026, Tuesday Woke up this mornin…...

YOLO26涨点改进| TGRS 2026 |独家创新首发、注意力改进篇| 引入CGTA曲率引导的稀疏全局注意力,保持局部稳定性的同时突出关键几何区域,含多种创新改进,促进YOLO26所有任务高效涨点

一、本文介绍 🔥本文给大家介绍利用 CGTA曲率引导的稀疏全局注意力模块 改进YOLO26网络模型,CGTA模块通过基于曲率信息选择关键特征并进行稀疏全局注意力建模,使模型能够在较低计算成本下实现高效的全局结构信息传播。该模块不仅增强了对关键结构区域的关注能力,还有效提…...

HunyuanVideo-Foley惊艳效果:海底世界音效+珊瑚游鱼视频生成高清集锦

HunyuanVideo-Foley惊艳效果:海底世界音效珊瑚游鱼视频生成高清集锦 1. 开场震撼效果展示 想象一下,你只需要输入一段简单的文字描述,就能获得一段栩栩如生的海底世界视频,同时配有完美的环境音效——气泡声、水流声、鱼群游动声…...

告别滚屏!用Warp AI终端把命令行变成可搜索、可复用的工作台(macOS/Windows/Linux保姆级配置)

用Warp AI终端重塑命令行生产力:从零构建可搜索、可协作的智能工作流 在开发者日常工作中,命令行终端是不可或缺的工具,但传统终端如iTerm2或Windows Terminal往往停留在"黑屏绿字"的原始形态。每次输入命令、查看输出、再输入下一…...

RWKV7-1.5B-g1a多语言实战:中英混合提示词生成效果对比

RWKV7-1.5B-g1a多语言实战:中英混合提示词生成效果对比 1. 模型简介 rwkv7-1.5B-g1a是基于新一代RWKV-7架构开发的多语言文本生成模型,特别适合处理中英混合内容。这个1.5B参数的轻量级模型在单卡24GB显存的设备上就能流畅运行,加载后显存占…...

myDV 抖音第三方TV版 专为电视TV设计的大屏版抖音 myDV TV版是借助AI技术开发

myDV 抖音第三方TV版 专为电视TV设计的大屏版抖音 myDV TV版是借助AI技术开发的抖音第三方客户端,专为电视遥控器操作设计的大屏版抖音。 下载地址: 链接:https://pan.xunlei.com/s…...

光伏系统里MPPT算法就像个急性子的猎犬,总在追着最大功率点跑。今天咱们拿三种步长策略的扰动观察法(PSS-PO)开刀,看看谁在动态响应和稳态震荡之间玩得最溜

三种步长的MPPT仿真效果对比(变步长、大步长、小步长) ①仿真模型:包含三种仿真。 放在同一个仿真中进行比对 [1]大步长扰动观察法:虽然能够迅速到达最大功率点,但是稳定的时候稳态震荡比较大(如下图&#…...

GGUF文件实战:5分钟教你用Hugging Face Transformers转换大模型权重

GGUF文件实战:5分钟教你用Hugging Face Transformers转换大模型权重 在AI模型部署的日常工作中,我们常常遇到一个令人头疼的问题:不同框架生成的模型权重格式五花八门,PyTorch的.pt、TensorFlow的.pb、ONNX的.onnx...每次切换环境…...

4:L的强化学习安全决策:蓝队的智能响应系统

作者: HOS(安全风信子) 日期: 2026-03-17 主要来源平台: ModelScope 摘要: 作为数字世界的守护者,我用强化学习技术构建安全决策系统,模拟最优防御策略。本文探讨了2026年强化学习在安全决策中的应用现状&a…...

Depth Anything 3 深度估计模型:如何实现92.4精度突破与多平台集成方案

Depth Anything 3 深度估计模型:如何实现92.4精度突破与多平台集成方案 【免费下载链接】Depth-Anything-3 Depth Anything 3 项目地址: https://gitcode.com/gh_mirrors/de/Depth-Anything-3 Depth Anything 3(DA3)作为当前领先的视觉…...

从源码到实战:如何在Linux上编译并使用bacwi扫描Bacnet设备(附bacnet-stack-0.8.3编译指南)

从源码到实战:Linux环境下Bacnet设备扫描全流程解析 在工业自动化与楼宇控制领域,Bacnet协议作为开放通信标准已广泛应用超过30年。对于系统集成工程师和物联网开发者而言,掌握从源码编译到实际扫描的完整技术链,不仅能解决特定环…...

3步解锁AI自动化:让浏览器成为你的智能助手

3步解锁AI自动化:让浏览器成为你的智能助手 【免费下载链接】web-ui Run AI Agent in your browser. 项目地址: https://gitcode.com/GitHub_Trending/web/web-ui 在数字化时代,我们每天都要面对大量重复性的网页操作——从市场调研时的信息收集&…...

【实战指南】基于Laravel与内存撮合引擎构建高并发数字资产交易平台

1. 为什么选择Laravel内存撮合引擎? 在开发数字资产交易平台时,技术选型直接决定了系统的性能和扩展性。我见过太多团队一开始就掉进坑里——用传统数据库撮合交易,结果并发量稍微上来就崩盘。这里分享下我们团队趟出来的实战方案。 Laravel框…...

SDMatte Web界面动效优化:抠图进度可视化、结果淡入动画、加载状态反馈

SDMatte Web界面动效优化:抠图进度可视化、结果淡入动画、加载状态反馈 1. 产品概述 SDMatte 是一款面向高质量图像抠图场景的AI模型,特别擅长处理复杂边缘和半透明物体的提取任务。无论是电商商品图去背景,还是设计素材的精修处理&#xf…...

新手编剧福音:ScriptGen Modern Studio保姆级教程,从灵感到剧本一键生成

新手编剧福音:ScriptGen Modern Studio保姆级教程,从灵感到剧本一键生成 1. 创作工作站简介 ScriptGen Modern Studio 是一款专为编剧和创意工作者设计的AI剧本创作平台。它采用Qwen 2.5 14B大语言模型作为核心引擎,配合专业的剧本创作微调…...