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高手》,我本人觉得这个作者还是不错,都是从场景来进行分析,感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…...

网络安全设备主要有什么
网络安全设备指的肯定是硬件设备了,国内卖安全硬件的没几家,天融信,启明星辰,绿盟,深信服,就这四家卖的比较齐全吧,上它们官网看一下,就知道市面上主要的网络安全设备有哪些了。分类…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...