PyTorch中的movedim、transpose与permute
在PyTorch中,movedim、transpose 和 permute这三个操作都可以用来重新排列张量(tensor)的维度,它们功能相似却又有所不同。
movedim
🔗 torch.movedim
- 用途:将张量的一个或多个维度移动到新的位置。
- 参数:需要指定要移动的维度和目标位置。
- 特点:
- 可以移动单个或多个维度。
- 可以指定移动后的维度顺序。
- 移动维度时,不会改变其他维度的相对顺序。
movedim 的重点是移动维度到指定位置,而transpose的重点是交换两个维度,这是它们之间最显著的区别,此外movedim还可以移动多个维度。
>>> x = torch.randint(1,100,(1,2,3,4))
>>> x
tensor([[[[58, 1, 62, 12],[65, 99, 20, 15],[95, 6, 54, 67]],[[92, 62, 97, 15],[17, 19, 70, 48],[17, 90, 76, 96]]]])
>>> x.shape
torch.Size([1, 2, 3, 4])
>>> ## 移动单个维度
>>> x.movedim(0,3).shape # 把原tensor中的dim0移动到dim3
torch.Size([2, 3, 4, 1])
>>> x.transpose(0,3).shape # 交换dim-0 和 dim-3
torch.Size([4, 2, 3, 1])
>>>
>>> ## 同时移动多个维度
>>>> x.movedim((0,2),(1,3)).shape # 把原tensor中的dim0移动到dim1, dim2移动到dim3
torch.Size([2, 1, 4, 3])
>>> x.movedim((0,1),(1,2)).shape # 把原tensor中的dim0移动到dim1, dim1移动到dim2
torch.Size([3, 1, 2, 4])
总结
- movedim是把指定维度移动到新的维度位置,其他未移动的的维度保持相对位置不变。
- 对于 source_tensor.movedim(d1, d2):
- 如果 d1,d2 是连续的,则效果等同于 source_tensor.transpos(d1, d2)
- 如果 d1 < d2,则移动后,原始维度中(d1, d2] 范围内的维度左移一位;
- 如果 d1 > d2,则移动后,原始维度中(d1, d2] 范围内的维度右移一位;
transpose
🔗 torch.transpose
- 用途:交换张量的两个维度。
- 参数:需要指定要交换的两个维度的索引。
- 特点:
- 只能交换两个维度。
- 对于2D张量,相当于矩阵的转置。
- 对于高维张量,只能进行一次交换。
>>> x = torch.randint(2,300,(2,3,4))
>>> x
tensor([[[ 23, 266, 112, 126],[176, 290, 291, 134],[155, 214, 238, 208]],[[ 20, 270, 192, 254],[ 59, 120, 47, 5],[247, 173, 94, 28]]])
>>> x.transpose(0,2).shape
torch.Size([4, 3, 2])
>>> x.transpose(0,2)
tensor([[[ 23, 20],[176, 59],[155, 247]],[[266, 270],[290, 120],[214, 173]],[[112, 192],[291, 47],[238, 94]],[[126, 254],[134, 5],[208, 28]]])
总结
- torch.transpose 是用于交换两个维度,且只能交换两个维度。
- torch.permute 可以交换多个维度
permute
🔗torch.permute
- 用途:重新排列张量的所有维度。
- 参数:需要提供一个维度索引的排列。
- 特点:
- 可以重新排列所有维度的顺序。
- 参数是一个包含所有维度索引的元组,且每个索引只能出现一次。
>>> x = torch.randint(2,300,(2,3,4))
>>> x
tensor([[[158, 169, 28, 85],[212, 14, 265, 119],[ 6, 201, 221, 145]],[[114, 209, 272, 232],[ 46, 179, 121, 296],[ 89, 76, 142, 185]]])
>>> x.shape
torch.Size([2, 3, 4])
>>> x.permute(2,0,1).shape # 表示:原tensor的dim2放到输出tensor的dim0,dim0放到dim1,dim1放到dim2。
torch.Size([4, 2, 3])
异同点
相同点:
- 都用于改变张量的维度顺序。
- 都不会改变张量中的数据,只是改变了数据的布局。
不同点:
- transpose仅限于交换两个维度,而movedim和permute可以处理多个维度。
- permute需要指定所有维度的排列顺序,而movedim只需要指定要移动的维度和目标位置。
- movedim在移动维度时,其他维度的相对顺序保持不变,而permute会根据提供的排列顺序完全重新排列所有维度。
相关文章:
PyTorch中的movedim、transpose与permute
在PyTorch中,movedim、transpose 和 permute这三个操作都可以用来重新排列张量(tensor)的维度,它们功能相似却又有所不同。 movedim 🔗 torch.movedim 用途:将张量的一个或多个维度移动到新的位置。参数&…...
HTTP(1)
HTTP协议 HTTP是什么 HTTP(全称为"超文本传输协议")是一种应用非常广泛的基于TCP协议的应用层协议。 常见的应用场景: 浏览器与服务器之间的交互(访问网站)手机与服务器之间的通信多个服务器之间进行通信 …...
C#常考随笔2:函数中多次使用string的+=处理,为什么会产生大量内存垃圾(垃圾碎片),有什么好的方法可以解决?
在 C# 中,由于string类型是不可变的,当在函数中多次使用操作符来拼接字符串时,每次操作都会创建一个新的string对象,旧的对象则成为垃圾对象,这会导致大量的内存分配和垃圾回收,产生内存垃圾和碎片。 在需…...
leetcode刷题记录(一百)——121. 买卖股票的最佳时机
(一)问题描述 121. 买卖股票的最佳时机 - 力扣(LeetCode)121. 买卖股票的最佳时机 - 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并…...
MATLAB绘图时线段颜色、数据点形状与颜色等设置,介绍
MATLAB在绘图时,设置线段颜色和数据点的形状与颜色是提高图形可读性与美观性的重要手段。本文将详细介绍如何在 MATLAB 中设置这些属性。 文章目录 线段颜色设置单字母颜色表示法RGB 值表示法 数据点的形状与颜色设置设置数据点颜色和形状示例代码 运行结果小结 线段…...
CIMRTS材质美化--放大采样、缩小采样
最新的CIMRTS v1.0.10中在要素管理中的材质美化增加「放大采样」和「缩小采样」参数,对于透明树叶可以达到较好效果。 在CesiumLab中,一棵树处理完成后,在EarthSDK中,就是呈现这样缩小就会有树叶丢失的情况。效果如下:…...
P8738 [蓝桥杯 2020 国 C] 天干地支
两种方法 #include<bits/stdc.h> using namespace std;int main(){int year;cin>>year;string tg[10] {"geng", "xin", "ren", "gui","jia", "yi", "bing", "ding", "wu&…...
PyCharm接入DeepSeek实现AI编程
目录 效果演示 创建API key 在PyCharm中下载CodeGPT插件 配置Continue DeepSeek 是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的 AI 模型。DeepSeek-V3 是 DeepSeek 公司推出的最新一代 AI 模型。其前身是 DeepSeek-V2.5,经过持续的…...
Java编程语言:辉煌的历史与未来前景
如果将软件开发世界比喻成一个宇宙,Java 无疑是其中最亮的星星之一。它从诞生起就改变了软件开发世界的格局。发展到今天,Java仍然是这个世界上最重要的编程语言之一。当然,它也面临着新的挑战。 Java的诞生 回溯到 1991 年,在 …...
麦田物语学习笔记:保存和加载场景中的物品
目录 基本流程 1.代码思路 2.代码实现 最终效果 补充知识点 1.序列化 2.委托 基本流程 现在在切换场景后,场景中的物品即使被拾取了,也还是会被重新加载出来,所以本篇文章的任务是在切换场景前后能保留当前场景的数据 1.代码思路 (1)为了保留处在地上的物品数据,就需要…...
页高速缓存与缓冲区缓存的应用差异
页高速缓存(Page Cache)与缓冲区缓存(Buffer Cache)是计算机系统中用于提高数据访问性能的两种不同类型的缓存机制,它们的差异主要体现在以下几个方面: 缓存目的 页高速缓存:主要用于加速对磁…...
深度学习 Pytorch 单层神经网络
神经网络是模仿人类大脑结构所构建的算法,在人脑里,我们有轴突连接神经元,在算法中,我们用圆表示神经元,用线表示神经元之间的连接,数据从神经网络的左侧输入,让神经元处理之后,从右…...
一文读懂 HTTP:Web 数据交换的基石
HTTP 概述 HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议,也就是说,请求是由接受方——通常是 Web 浏览器——发…...
算法知识补充2
一部分:Tire树:高效地存储和查找字符串集合的数据结构acwing835 #include<iostream> #include<cstring> using namespace std; const int N100010; int son[N][26],cnt[N],idx; char str[N]; void insert(char str[]){int p0;for(int i0;st…...
Vue.js组件开发-实现对视频预览
在 Vue 中实现视频文件预览 实现步骤 创建 Vue 组件:构建一个 Vue 组件用于处理视频文件的选择和预览。文件选择:添加一个文件输入框,允许用户选择视频文件。读取文件:监听文件选择事件,使用 FileReader API 读取所选…...
SSM开发(三) spring与mybatis整合(含完整运行demo源码)
目录 本文主要内容 一、Spring整合MyBatis的三个关键点 二、整合步骤 1、创建一个Maven项目 2、在pom.xml文件中添加jar包的依赖 3、配置MyBatis 注解实现方式 XML配置文件实现 4、配置Spring 5、测试运行 本文主要内容 1. Spring + Mybatis整合; 2. MyBatis两种SQL…...
.NET MAUI进行UDP通信(二)
上篇文章有写过一个简单的demo,本次对项目进行进一步的扩展,添加tabbar功能。 1.修改AppShell.xaml文件,如下所示: <?xml version"1.0" encoding"UTF-8" ?> <Shellx:Class"mauiDemo.AppShel…...
14-6-3C++STL的list
(一)list的插入 1.list.insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置 #include <iostream> #include <list> using namespace std; int main() { list<int> lst; lst.push_back(10); l…...
AAAI2024论文解读|HGPROMPT Bridging Homogeneous and Heterogeneous Graphs
论文标题 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning 跨同构异构图的小样本提示学习 论文链接 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning论文下载 论文作者 Xingtong Yu, Yuan…...
WPA_cli P2P命令详解及使用
目录 通用命令 status scan scan_results add_network set_network enable_network reconfigure save_config quit P2P 相关命令 p2p_find p2p_peers p2p_connect [method] p2p_group_add [ssid=] [freq=] [ht40] [persistent] p2p_remove_client p2p_di…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
