pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)/ x @ y
- 代码
- 代码 1:`torch.matmul(x, y)`
- 输入张量:
- 计算逻辑:
- 输出结果:
- 代码 2:`y = y.view(4,1)` 再 `torch.matmul(x, y)`
- 输入张量:
- 计算逻辑:
- 输出结果:
- 总结:两种情况的区别
代码
x = torch.tensor([[1,2,3,4], [5,6,7,8]])
y = torch.tensor([2, 3, 1, 0]) # y.shape == (4)
print(torch.matmul(x, y))
print(x @ y)
>>>
tensor([11, 35])
tensor([11, 35])
x = torch.tensor([[1,2,3,4], [5,6,7,8]])
y = torch.tensor([2, 3, 1, 0]) # y.shape == (4)
y = y.view(4,1) # y.shape == (4, 1)
'''
tensor([[2],[3],[1],[0]])
'''
print(torch.matmul(x, y))
print(x @ y)
>>>
tensor([[11],[35]])
tensor([[11],[35]])
在这段代码中,torch.matmul(x, y) 或者x @ y计算的是矩阵乘法或张量乘法。我们分两种情况详细分析:
代码 1:torch.matmul(x, y)
输入张量:
x是一个 2D 张量,形状为(2, 4):tensor([[1, 2, 3, 4],[5, 6, 7, 8]])y是一个 1D 张量,形状为(4,):tensor([2, 3, 1, 0])
计算逻辑:
在 PyTorch 中,如果 matmul 的一个输入是 2D 张量,另一个是 1D 张量,计算规则是:
- 将 1D 张量
y当作列向量(4, 1),与矩阵x进行矩阵乘法。 - 结果是一个 1D 张量,形状为
(2,)。
矩阵乘法公式:
result [ i ] = ∑ j x [ i , j ] ⋅ y [ j ] \text{result}[i] = \sum_j x[i, j] \cdot y[j] result[i]=j∑x[i,j]⋅y[j]
具体计算步骤:
- 对第一行
[1, 2, 3, 4]:
( 1 ⋅ 2 ) + ( 2 ⋅ 3 ) + ( 3 ⋅ 1 ) + ( 4 ⋅ 0 ) = 2 + 6 + 3 + 0 = 11 (1 \cdot 2) + (2 \cdot 3) + (3 \cdot 1) + (4 \cdot 0) = 2 + 6 + 3 + 0 = 11 (1⋅2)+(2⋅3)+(3⋅1)+(4⋅0)=2+6+3+0=11 - 对第二行
[5, 6, 7, 8]:
( 5 ⋅ 2 ) + ( 6 ⋅ 3 ) + ( 7 ⋅ 1 ) + ( 8 ⋅ 0 ) = 10 + 18 + 7 + 0 = 35 (5 \cdot 2) + (6 \cdot 3) + (7 \cdot 1) + (8 \cdot 0) = 10 + 18 + 7 + 0 = 35 (5⋅2)+(6⋅3)+(7⋅1)+(8⋅0)=10+18+7+0=35
输出结果:
torch.matmul(x, y)
# tensor([11, 35])
代码 2:y = y.view(4,1) 再 torch.matmul(x, y)
输入张量:
x是同一个 2D 张量,形状为(2, 4)。y被重塑为 2D 张量,形状为(4, 1):tensor([[2],[3],[1],[0]])
计算逻辑:
在这种情况下,matmul 执行的是 矩阵乘法,两个输入的形状为 (2, 4) 和 (4, 1):
- 矩阵乘法的规则是:前一个矩阵的列数必须等于后一个矩阵的行数。
- 结果张量的形状是
(2, 1)。
矩阵乘法公式:
result [ i , k ] = ∑ j x [ i , j ] ⋅ y [ j , k ] \text{result}[i, k] = \sum_j x[i, j] \cdot y[j, k] result[i,k]=j∑x[i,j]⋅y[j,k]
具体计算步骤:
- 对第一行
[1, 2, 3, 4]和列向量[[2], [3], [1], [0]]:
( 1 ⋅ 2 ) + ( 2 ⋅ 3 ) + ( 3 ⋅ 1 ) + ( 4 ⋅ 0 ) = 2 + 6 + 3 + 0 = 11 (1 \cdot 2) + (2 \cdot 3) + (3 \cdot 1) + (4 \cdot 0) = 2 + 6 + 3 + 0 = 11 (1⋅2)+(2⋅3)+(3⋅1)+(4⋅0)=2+6+3+0=11 - 对第二行
[5, 6, 7, 8]和列向量[[2], [3], [1], [0]]:
( 5 ⋅ 2 ) + ( 6 ⋅ 3 ) + ( 7 ⋅ 1 ) + ( 8 ⋅ 0 ) = 10 + 18 + 7 + 0 = 35 (5 \cdot 2) + (6 \cdot 3) + (7 \cdot 1) + (8 \cdot 0) = 10 + 18 + 7 + 0 = 35 (5⋅2)+(6⋅3)+(7⋅1)+(8⋅0)=10+18+7+0=35
输出结果:
torch.matmul(x, y)
# tensor([[11],
# [35]])
总结:两种情况的区别
-
y是 1D 张量:torch.matmul(x, y)返回一个 1D 张量,形状为(2,)。- 相当于将
y当作列向量,与矩阵x做矩阵乘法。
-
y是 2D 张量:torch.matmul(x, y)返回一个 2D 张量,形状为(2, 1)。- 矩阵乘法严格遵守二维矩阵的维度规则。
两者的结果数值相同,但形状不同,主要是因为输入张量的维度不同,导致输出的维度也发生了变化。
相关文章:
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)/ x y 代码代码 1:torch.matmul(x, y)输入张量:计算逻辑:输出结果: 代码 2:y y.view(4,1)…...
PyTorch环境配置常见报错的解决办法
目标 小白在最基础的环境配置里一般都会出现许多问题。 这里把一些常见的问题分享出来。希望可以节省大家一些时间。 最终目标是可以在cmd虚拟环境里进入jupyter notebook,new的时候有对应的环境,并且可以跑通所有的import code。 第一步:…...
罗永浩再创业,这次盯上了 AI?
罗永浩,1972年7月9日生于中国延边朝鲜族自治州的一个军人家庭,是一名朝鲜族人;早年在新东方授课,2004年当选 “网络十大红人” ;2006年8月1日,罗永浩创办牛博网;2008年5月,罗永浩注册…...
VUE3 provide 和 inject,跨越多层级组件传递数据
provide 和 inject 是 Vue 3 提供的 API,主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中,跨越多层组件传递数据,而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...
git打补丁
1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞,作者进行了修复,我们可以通过使用git补丁的方式,将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量,生成…...
机械燃油车知识图谱、知识大纲、知识结构(持续更新...)
一、发动机 曲柄连杆机构 配气机构 点火系统 起动系统 燃油供给系统 润滑系统 冷却系统 二、底盘 (一)传动系统 1、离合器 2、变速器 3、万向传动装置 4、驱动桥 (二)行驶系统 1、车架 2、车桥 3、悬架 4、车轮 &a…...
Vue3学习总结
一、Vue 3 基础搭建与核心语法 1.创建 Vue 3 应用 在项目的入口文件 main.js 中,通过以下代码创建 Vue 3 应用实例: import { createApp } from vue; import App from ./App.vue;const app createApp(App); app.mount(#app); 这几行代码的作用是引入…...
Type-C双屏显示器方案
在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…...
【读书与思考】焦虑与内耗
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 导言 今天一个朋友和我说,最近比较焦虑和内耗,无心工作和学习,我问他你焦虑内耗的时候,时间主要花在哪了,他告诉我说主要花在看有关移…...
基于python的网页表格数据下载--转excel
基于 Python 的网页表格数据爬取与下载:以维基百科为例 目录 基于 Python 的网页表格数据爬取与下载:以维基百科为例1. 背景介绍2. 工具与环境3. 操作步骤1. 获取网页内容2. 定位表格元素3. 表格变身 Pandas DataFrame4. 检查数据,收工!5. 进阶玩法与优化6. 完整代码4. 结果…...
Vue.js开发入门:从零开始搭建你的第一个项目
前言 嘿,小伙伴们!今天咱们来聊聊 Vue.js,一个超火的前端框架。如果你是编程小白,别怕,跟着我一步步来,保证你能轻松上手,搭建起属于自己的第一个 Vue 项目。Vue.js 可能听起来有点高大上&#…...
LS1046+XILINX XDMA PCIE调通
欢迎点赞收藏,欢迎私下讨论技术,分享技术 硬件平台 :NXP LS1046 XILINX FPGA 软件平台:LINUX 4.19.68 buildroot LS1046 PEX3 接 XILINX FPGA,linux使用designware的PCI主控制器。下载XILINX DMA驱动,解…...
HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系
一、前言 当开发者使用Builder做引用数据传递时,会考虑组件的父子关系,使用了bind(this)之后,组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题,引入LocalBuilder装饰器。…...
YOLOv10-1.1部分代码阅读笔记-downloads.py
downloads.py ultralytics\utils\downloads.py 目录 downloads.py 1.所需的库和模块 2.def is_url(url, checkFalse): 3.def delete_dsstore(path, files_to_delete(".DS_Store", "__MACOSX")): 4.def zip_directory(directory, compressTrue, ex…...
计算机图形学【绘制立方体和正六边形】
工具介绍 OpenGL:一个跨语言的图形API,用于渲染2D和3D图形。它提供了绘制图形所需的底层功能。 GLUT:OpenGL的一个工具库,简化了窗口创建、输入处理和其他与图形环境相关的任务。 使用的函数 1. glClear(GL_COLOR_BUFFER_BIT |…...
基于django中医药数据可视化平台(源码+lw+部署文档+讲解),源码可白嫖!
摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,中医药管理平台当然不能排除在外。中医药数据可视化平台是在实际应用和软件工程的开发原理之上,运用Python语言、ECharts技术、…...
kafka消费堆积问题探索
背景 我们的商城项目用PHP写的,原本写日志方案用的是PHP的方案,但是,这个方案导致资源消耗一直降不下来,使用了20个CPU。后面考虑使用通过kafka的方案写日志,商城中把产生的日志丢到kafka中,在以go写的项目…...
Vue.js 使用插槽(Slots)优化组件结构
Vue.js 使用插槽(Slots)优化组件结构 今天我们聊聊 Vue.js 的一个超实用功能——插槽(Slots)。插槽是 Vue 组件开发中的神器,用好它,你可以让组件变得更灵活、更可复用,还能写出优雅的代码结构…...
Broker如何进行定时心跳发送和故障感知
1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》,我本人觉得这个作者还是不错,都是从场景来进行分析,感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…...
网络安全设备主要有什么
网络安全设备指的肯定是硬件设备了,国内卖安全硬件的没几家,天融信,启明星辰,绿盟,深信服,就这四家卖的比较齐全吧,上它们官网看一下,就知道市面上主要的网络安全设备有哪些了。分类…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
