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

PyTorch使用(6)-张量形状操作

文章目录

  • 1. reshape函数
    • 1.1. 功能与用法
    • 1.2. 特点
  • 2. transpose和permute函数
    • 2.1. transpose
    • 2.2. permute
    • 2.3. 区别
  • 3. view和contiguous函数
    • 3.1. view
    • 3.2. contiguous
    • 3.3. 特点
  • 4. squeeze和unsqueeze函数
    • 4.1. squeeze
    • 4.2. unsqueeze
  • 5. 应用场景
  • 6. 形状操作综合比较
  • 7. 最佳实践建议
  • 8. 总结

1. reshape函数

1.1. 功能与用法

reshape函数可以改变张量的形状而不改变其数据,新形状的元素总数必须与原张量一致。

import torchx = torch.arange(6)  # tensor([0, 1, 2, 3, 4, 5])# 改变形状为2x3
y = x.reshape(2, 3)
"""
tensor([[0, 1, 2],[3, 4, 5]])
"""# 自动推断维度大小
z = x.reshape(3, -1)  # -1表示自动计算该维度大小
"""
tensor([[0, 1],[2, 3],[4, 5]])
"""

1.2. 特点

  • 不改变原始数据,只改变视图

  • 可以处理非连续内存的张量

  • 当无法返回视图时会自动复制数据

2. transpose和permute函数

2.1. transpose

交换两个指定维度:

x = torch.randn(2, 3, 4)# 交换维度0和1
y = x.transpose(0, 1)  # 形状变为(3, 2, 4)# 对于2D张量,transpose相当于矩阵转置
matrix = torch.randn(3, 4)
matrix.T == matrix.transpose(0, 1)  # True

2.2. permute

重新排列所有维度:

x = torch.randn(2, 3, 4, 5)# 重新排列维度顺序
y = x.permute(2, 0, 3, 1)  # 新形状(4, 2, 5, 3)

2.3. 区别

  • transpose只能交换两个维度
  • permute可以任意重新排列所有维度

3. view和contiguous函数

3.1. view

类似于reshape,但要求张量是连续的:

x = torch.arange(6)# 改变形状
y = x.view(2, 3)# 会报错的情况
x_non_contiguous = x.t()  # 转置后不连续
try:x_non_contiguous.view(6)
except RuntimeError as e:print(e)  # 需要连续张量

3.2. contiguous

使张量在内存中连续排列:

x = torch.randn(3, 4).transpose(0, 1)  # 不连续张量# 转换为连续张量
x_cont = x.contiguous()  # 可能复制数据# 现在可以使用view
y = x_cont.view(12)

3.3. 特点

  • view比reshape更快,但有限制

  • 转置、切片等操作可能导致不连续

  • 需要view操作前应检查连续性

4. squeeze和unsqueeze函数

4.1. squeeze

移除所有大小为1的维度:

x = torch.randn(1, 3, 1, 2)# 移除所有大小为1的维度
y = x.squeeze()  # 形状变为(3, 2)# 只移除指定维度
z = x.squeeze(dim=0)  # 形状变为(3, 1, 2)

4.2. unsqueeze

在指定位置增加大小为1的维度:

x = torch.randn(3, 4)# 在维度0增加一个维度
y = x.unsqueeze(0)  # 形状变为(1, 3, 4)# 在维度1增加一个维度
z = x.unsqueeze(1)  # 形状变为(3, 1, 4)

5. 应用场景

  • unsqueeze常用于广播前的维度对齐

  • squeeze常用于移除不必要的单维度

  • 神经网络输入/输出经常需要调整维度

6. 形状操作综合比较

操作是否改变数据是否要求连续适用场景性能
reshape通用形状改变
view快速形状改变
transpose交换两个维度
permute复杂维度重排
squeeze移除单维度
unsqueeze增加单维度

7. 最佳实践建议

  • 优先使用view:当确定张量连续时,view性能更好

  • 注意连续性:复杂操作后使用is_contiguous()检查

  • 维度顺序:保持合理的维度顺序(N,C,H,W等)

  • 避免频繁reshape:多次形状改变可能降低性能

  • 使用-1推断:合理利用-1自动计算维度大小

# 形状操作典型工作流示例
def prepare_input(data):# 增加batch维度data = data.unsqueeze(0)# 确保内存连续if not data.is_contiguous():data = data.contiguous()# 改变形状为网络输入格式return data.view(1, -1, data.size(-1))

8. 总结

  • reshape:用来改变张量的形状,返回一个新的张量。
  • transpose:交换张量的两个维度。
  • permute:按指定的维度顺序重新排列张量的所有维度。
  • view:用来改变张量的形状,要求张量在内存中是连续的。
  • contiguous:确保张量是连续的,可以在需要 view 操作时使用。
  • squeeze:去除张量中维度为1的维度。
  • unsqueeze:在张量的指定位置添加一个维度。

相关文章:

PyTorch使用(6)-张量形状操作

文章目录 1. reshape函数1.1. 功能与用法1.2. 特点 2. transpose和permute函数2.1. transpose2.2. permute2.3. 区别 3. view和contiguous函数3.1. view3.2. contiguous3.3. 特点 4. squeeze和unsqueeze函数4.1. squeeze4.2. unsqueeze 5. 应用场景6. 形状操作综合比较7. 最佳实…...

SpringBoot底层-数据源自动配置类

SpringBoot默认使用Hikari连接池,当我们想要切换成Druid连接池,底层原理是怎样呢 SpringBoot默认连接池——Hikari 在spring-boot-autoconfiguration包内有一个DataSourceConfiguraion配置类 abstract class DataSourceConfiguration {Configuration(p…...

数字内容个性化推荐引擎构建

实时数据驱动推荐优化 现代数字内容体验的核心竞争力在于系统对用户需求的即时捕捉与响应。通过实时数据流处理技术,推荐引擎能够同步采集用户点击、停留时长、交互轨迹等多维度行为数据,并借助分布式计算框架在毫秒级完成特征提取与模式识别。例如&…...

【工具】Redis管理工具推荐

【运维】Redis管理工具推荐 Another Redis Desktop Manager 🚀🚀🚀 更快、更好、更稳定的Redis桌面(GUI)管理客户端,兼容Windows、Mac、Linux,性能出众,轻松加载海量键值 AnotherRedisDesktopManager 发行版…...

【高校主办】2025年第四届信息与通信工程国际会议(JCICE 2025)

重要信息 会议网址:www.jcice.org 会议时间:2025年7月25-27日 召开地点:哈尔滨 截稿时间:2025年6月15日 录用通知:投稿后2周内 收录检索:EI,Scopus 会议简介 JCICE 2022、JCICE 2023、JCICE 2…...

【区块链安全 | 第三十一篇】合约(五)

文章目录 合约库库中的函数签名和选择器库的调用保护合约 库 库与合约类似,但它们的目的是仅在特定地址上部署一次,并通过 EVM 的 DELEGATECALL(在 Homestead 之前是 CALLCODE)功能重复使用其代码。这意味着如果调用库函数,它们的代码将在调用合约的上下文中执行,即 th…...

系统与网络安全------Windows系统安全(8)

资料整理于网络资料、书本资料、AI,仅供个人学习参考。 DNS DNS概述 为什么需要DNS系统 www.baidu.com与119.75.217.56,哪个更好记? 互联网中的114查号台/导航员 DNS(Domian Name System,域名系统)的功…...

代理模式的优缺点是什么?

什么是代理模式? 代理模式(Proxy Pattern)是一种结构型设计模式,它通过创建代理对象来控制对原始对象的访问。 这种模式在前端开发中广泛应用,特别是在需要控制对象访问、添加额外逻辑或优化性能的场景中。 ​​核心…...

基于LangChain和通义(Tongyi)实现NL2SQL的智能检索(无需训练)

在数据驱动的时代,如何高效地从数据库中获取信息成为了一个重要的挑战。自然语言到SQL(NL2SQL)技术提供了一种便捷的解决方案,使用户能够用自然语言查询数据库,而无需深入了解SQL语法。本文将探讨如何利用LangChain和通义(Tongyi)实现NL2SQL的智能检索,具体步骤如下: …...

Spring Boot 集成 Redis 对哈希数据的详细操作示例,涵盖不同结构类型(基础类型、对象、嵌套结构)的完整代码及注释

以下是 Spring Boot 集成 Redis 对哈希数据的详细操作示例&#xff0c;涵盖不同结构类型&#xff08;基础类型、对象、嵌套结构&#xff09;的完整代码及注释&#xff1a; 1. 集成步骤 1.1 添加依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependency><groupId&g…...

ROS云课三分钟-差动移动机器人巡逻报告如何撰写-中等报告

评语&#xff1a; 成绩中等&#xff08;70/100&#xff09;&#xff0c;具体如下&#xff1a; 1. 摘要部分 问题描述&#xff1a; 内容空洞&#xff1a;摘要过于简短&#xff0c;仅简要概述了研究内容和实现方法&#xff0c;未突出研究的创新点或重要性。缺乏细节&#xff1…...

Java8+Spring Boot + Vue + Langchain4j 实现阿里云百炼平台 AI 流式对话对接

1. 引言 在本文中&#xff0c;我们将介绍如何使用 Spring Boot、Vue.js 和 Langchain4j&#xff0c;实现与 阿里云百炼平台 的 AI 流式对话对接。通过结合这些技术&#xff0c;我们将创建一个能够实时互动的 AI 聊天应用。 这是一个基于 Spring Boot Vue.js Langchain4j 的智…...

可发1区的超级创新思路(python 实现):一种轻量化的动态稀疏门控网络

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 一、应用领域 视频异常检测、生成视频检测。 二、模型解析 该模型由1.关键帧动态选择机制、2.关键帧动态选择机制以及3.关键帧动态选择机制三大核心组件构成,形成端到端的视频异常…...

【Kafka基础】单机安装与配置指南,从零搭建环境

学习Kafka&#xff0c;掌握Kafka的单机部署是理解其分布式特性的第一步。本文将手把手带你完成Kafka单机环境的安装、配置及基础验证&#xff0c;涵盖常见问题排查技巧。 1 环境准备 1.1 系统要求 操作系统&#xff1a;CentOS 7.9依赖组件&#xff1a;JDK 8&#xff08;Kafka …...

Scala 转义字符

Scala 转义字符 引言 Scala作为一种多范式编程语言&#xff0c;拥有丰富的字符处理能力。在Scala编程中&#xff0c;转义字符的使用非常频繁&#xff0c;它们可以用来处理字符串中的特殊字符&#xff0c;使得字符串的表示更加直观和符合预期。本文将详细探讨Scala中的转义字符…...

TCP/IP五层协议

目录 1. 五层模型结构 2. 各层核心功能与协议 (1) 应用层&#xff08;Application Layer&#xff09; (2) 传输层&#xff08;Transport Layer&#xff09; (3) 网络层&#xff08;Network Layer&#xff09; (4) 数据链路层&#xff08;Data Link Layer&#xff09; (5…...

Dify接口api对接,流式接收流式返回(.net)

试了好多种方法除了Console.WriteLine()能打印出来&#xff0c;试了好些方法都不行&#xff0c;不是报错就是打印只有一行&#xff0c;要么就是接收完才返回...下面代码实现调用api接收流式数据&#xff0c;并进行流式返回给前端&#xff1a; using Furion.HttpRemote; using …...

微信小程序开发前端培训课程

大前端培训课程 1.HTML课程&#xff1a; 1.HTML标签基础 2.布局DIVspan 3.表单标签 4.多媒体标签 5.Table使用 2.CSS课程&#xff1a; 1.Box 盒子模型&#xff0c;列表布局&#xff08;一行两列&#xff0c;一行多列&#xff09; 2.单行文字&#xff0c;多行文字 3.文…...

代码随想录算法训练营第五十二天|图论专题: 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿

101. 孤岛的总面积 本题要求找到不靠边的陆地面积&#xff0c;那么我们只要从周边找到陆地然后 通过 dfs或者bfs 将周边靠陆地且相邻的陆地都变成海洋&#xff0c;然后再去重新遍历地图 统计此时还剩下的陆地就可以了。 1、从左边和后边向中间遍历 2、从上边和下边向中间遍历…...

仿modou库one thread one loop式并发服务器

源码&#xff1a;田某super/moduo 目录 SERVER模块&#xff1a; Buffer模块&#xff1a; Socket模块&#xff1a; Channel模块&#xff1a; Connection模块&#xff1a; Acceptor模块&#xff1a; TimerQueue模块&#xff1a; Poller模块&#xff1a; EventLoop模块&a…...

MNIST 数据集 与 TFOD API

此处给出我在进行毕业设计过程中写的三份脚本&#xff0c;作为demo 展示模型的预处理&#xff0c;输出信息提取和TFOD API的应用。 script1 加载本地的MNIST模型&#xff0c;对本地的手写数字进行推理 # test the validation of the saved file and the camera import cv2 i…...

SpringSecurity6.0 通过JWTtoken进行认证授权

之前写过一个文章&#xff0c;从SpringSecurity 5.x升级到6.0&#xff0c;当时是为了配合公司的大版本升级做的&#xff0c;里面的各项配置都是前人留下来的&#xff0c;其实没有花时间进行研究SpringSecurity的工作机制。现在新东家有一个简单的系统要搭建&#xff0c;用户的认…...

【Java】Maven

一、概念 是一个项目管理和构建工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;的概念&#xff0c;通过一小段描述信息来管理项目的构建。 二、Maven坐标 <groupId>com.itheima</groupId><artifactId>maven-project01</artifactId>&…...

第十五届蓝桥杯PythonC组题解

A题&#xff1a;拼正方形 问题描述 给定一定数量的 22 和 11 的方块&#xff0c;求能拼出的最大正方形边长。 解题思路 二分法&#xff1a;将奇数和偶数边长分开处理&#xff0c;通过二分法寻找最大满足条件的边长。面积验证&#xff1a;总方块面积需大于等于目标正方形面积…...

MATLAB中plot函数的详细参数表

LineSpec - 线型、标记和颜色 线型说明-实线--虚线:点线-.点划线 标记说明o圆圈加号*星号.点x叉号_水平线条|垂直线条s方形d菱形^上三角v下三角>右三角<左三角p五角形h六角形 颜色说明 y 黄色 m 品红色 c 青蓝色 r 红色 g 绿色 b 蓝色 w 白色 k 黑色 MarkerFaceColor…...

R语言赋能气象水文科研:从多维数据处理到学术级可视化

全球气候变化加剧了极端天气与水文事件的复杂性&#xff0c;气象卫星、雷达、地面观测站及水文传感器每天产生TB级‌时空异质数据‌。传统研究常面临四大瓶颈&#xff1a; ‌数据清洗低效‌&#xff1a;缺失值、异常值处理耗时&#xff1b;‌时空分析模型构建复杂‌&#xff1…...

虚拟试衣间-云尚衣橱小程序-衣橱管理实现

衣橱管理实现 目标 (Goal): 用户 (User): 能通过 UniApp 小程序上传衣服图片。 后端 (Backend): 接收图片,存到云存储,并将图片信息(URL、用户ID等)存入数据库。 用户 (User): 能在小程序里看到自己上传的所有衣服图片列表。 技术栈细化 (Refined Tech Stack for this Pha…...

BGP路由协议之属性2

Orgin 起源 公认必遵属性 起源名称标记描述IGPi如果路由是由始发的 BGP 路由器使用 network 命令注入到 BGP 的&#xff0c;那么该 BGP 路由的 origin 属性为 IGPEGPe如果路由是通过 EGP 学习到的&#xff0c;那么该 BGP 路由的 Origin 属性为 EGPIncomplete?如果路由是通过…...

纯个人整理,蓝桥杯使用的算法模板day2(0-1背包问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个

算法索引 01背包优化前空间优化版&#xff08;使用一维数组&#xff09;优化后的模拟流程图为何优化后&#xff0c;j不能使用正序遍历模拟流程图 代码对应实现案例 01背包 优化前 /*** 0-1背包问题解法&#xff08;与下方代码表格示例对应&#xff0c;已模拟验证&#xff09;*…...

算法与数据结构线性表之栈和队列

Hello大家好&#xff01; 很高兴与大家见面&#xff01; 给生活添点快乐&#xff0c;开始今天的编程之路。 我的博客:<但愿. 我的专栏:C语言、题目精讲、算法与数据结构、C 欢迎点赞&#xff0c;关注 一 栈 1概念&#xff1a;栈是⼀种特殊的线性表&#xff0c;其只允许…...