PyTorch维度操作的函数介绍

server/2024/9/18 12:04:55/ 标签: pytorch, 人工智能, python

在 PyTorch 中,操作张量的维度是常见的需求,特别是在处理多维数据时。PyTorch 提供了一系列函数来操作张量的维度,包括改变维度顺序、添加或删除维度、扩展维度等。下面是一些常用的维度操作函数及其示例代码。

1. view()

  • 作用:重新调整张量的形状(维度),但不改变其数据内容。view() 是基于张量的原始内存布局进行操作的,要求重新调整的形状能与原始数据兼容。
  • 示例
import torch# 创建一个形状为 [2, 3, 4] 的张量
tensor = torch.randn(2, 3, 4)# 调整为形状为 [6, 4] 的张量
reshaped = tensor.view(6, 4)
print(reshaped.shape)  # 输出: torch.Size([6, 4])

2. permute()

  • 作用:重新排列张量的维度顺序。
  • 示例
import torch# 创建一个形状为 [2, 3, 4] 的张量
tensor = torch.randn(2, 3, 4)# 交换第一个维度和第二个维度,得到形状为 [3, 2, 4] 的张量
permuted = tensor.permute(1, 0, 2)
print(permuted.shape)  # 输出: torch.Size([3, 2, 4])

3. unsqueeze()

  • 作用:在指定位置插入一个大小为 1 的新维度。
  • 示例
import torch# 创建一个形状为 [3, 4] 的张量
tensor = torch.randn(3, 4)# 在第 0 维添加一个新维度,结果形状为 [1, 3, 4]
unsqueezed = tensor.unsqueeze(0)
print(unsqueezed.shape)  # 输出: torch.Size([1, 3, 4])

4. squeeze()

  • 作用:移除张量中所有大小为 1 的维度。
  • 示例
import torch# 创建一个形状为 [1, 3, 1, 4] 的张量
tensor = torch.randn(1, 3, 1, 4)# 移除所有大小为 1 的维度,结果形状为 [3, 4]
squeezed = tensor.squeeze()
print(squeezed.shape)  # 输出: torch.Size([3, 4])

5. transpose()

  • 作用:交换张量的两个指定维度。
  • 示例
import torch# 创建一个形状为 [2, 3, 4] 的张量
tensor = torch.randn(2, 3, 4)# 交换第 1 维和第 2 维,结果形状为 [2, 4, 3]
transposed = tensor.transpose(1, 2)
print(transposed.shape)  # 输出: torch.Size([2, 4, 3])

6. expand()

  • 作用:将张量的某些维度扩展为更大的尺寸,不会复制数据,而是通过广播机制扩展。
  • 示例
import torch# 创建一个形状为 [2, 1, 4] 的张量
tensor = torch.randn(2, 1, 4)# 扩展第 1 维到大小为 3,结果形状为 [2, 3, 4]
expanded = tensor.expand(2, 3, 4)
print(expanded.shape)  # 输出: torch.Size([2, 3, 4])

7. repeat()

  • 作用:沿着指定的维度重复张量的元素。
  • 示例
import torch# 创建一个形状为 [2, 3] 的张量
tensor = torch.randn(2, 3)# 沿着第 0 维和第 1 维分别重复 2 次和 3 次,结果形状为 [4, 9]
repeated = tensor.repeat(2, 3)
print(repeated.shape)  # 输出: torch.Size([4, 9])

8. cat()

  • 作用:在指定维度上连接多个张量。
  • 示例
import torch# 创建两个形状为 [2, 3] 的张量
tensor1 = torch.randn(2, 3)
tensor2 = torch.randn(2, 3)# 在第 0 维连接,结果形状为 [4, 3]
concatenated = torch.cat([tensor1, tensor2], dim=0)
print(concatenated.shape)  # 输出: torch.Size([4, 3])

9. stack()

  • 作用:在新的维度上堆叠多个张量。
  • 示例
import torch# 创建两个形状为 [2, 3] 的张量
tensor1 = torch.randn(2, 3)
tensor2 = torch.randn(2, 3)# 在新的第 0 维堆叠,结果形状为 [2, 2, 3]
stacked = torch.stack([tensor1, tensor2], dim=0)
print(stacked.shape)  # 输出: torch.Size([2, 2, 3])

总结

PyTorch 提供了丰富的维度操作函数,使得张量的操作非常灵活。在处理多维数据时,合理使用这些函数可以极大地简化代码,并提高数据处理的效率。


http://www.ppmy.cn/server/112652.html

相关文章

调用火山云的语音生成TTS和语音识别STT

首先需要去火山云的控制台开通TTS和STT服务语音技术 (volcengine.com) 火山这里都提供了免费的额度可以使用 我这里是使用了java来调用API 目前我还了解到阿里的开源项目SenseVoice(STT)和CosyVoice(TTS)非常的不错,但是都是使用Python开发…

【Python】Requests:请求发送

requests 是一个简洁易用的 Python 库,用于发送 HTTP 请求。它支持多种 HTTP 方法,并且在处理响应、会话保持、超时和重试等方面提供了强大的功能。本文将带你逐步了解如何使用 requests 库,并通过实例掌握其基本用法。 发送 HTTP 请求 常见…

C#从入门到精通(22)—Path类的使用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家!人工智能学习网站 前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任…

Spring + ActiveMQ 整合实现点对点(point to point)消息发送案例

本节演示点对点模式的消息发送的 Spring ActiveMQ 代码。 Spring ActiveMQ 整合 1、依懒包 spring&#xff1a;4.2.5.RELEASE&#xff0c;activemq-all&#xff1a;5.15.0 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-a…

电脑知识:如何恢复 Word、媒体和存档文件?

如果您是 Word 用户&#xff0c;那么您一定对无法打开 Word 文档的问题很熟悉。当文档包含大量关键信息时&#xff0c;情况会变得更加复杂。如果您遇到这种情况&#xff0c;那么您将如何处理&#xff1f; 我们再怎么强调在外部存储位置&#xff08;如外部硬盘、网络位置&#…

每天1亿Amazon EC2实例稳定启动背后:解密亚马逊云科技如何构建可靠的云服务

如今&#xff0c;全球大部分互联网应用&#xff0c;以及相当一部分企业服务都跑在云上。云服务一旦出现宕机、服务中断&#xff0c;将为整个经济社会带来巨大的经济损失。尤其是对于那些依赖实时数据处理和分析的行业&#xff0c;如金融交易、在线零售和社交媒体平台&#xff0…

【Python】企业排名、地域分布与词云分析可视化

目录 数据处理 Pyecharts 各国数量 分布地图 数量占比 城市分布 营业收入 利润转化 数据处理 2021世界五百强企业数据&#xff0c;包含公司名称、公司链接、营业收入(百万美元)、利润(百万美元)、国家等信息。数据集下载&#xff1a;Python企业排名、地域分布与词云分…

cocotb的接收和发送逻辑,还是没有弄明白

发送有两种方式 1、定义这样的发 通过前缀连接DUT里面的信号 发送的时候&#xff0c;通过.去访问就可以 2、如果是AXI总线&#xff0c;可以直接调用cocotb的库文件 AXIS总线可以包含以下的信号 通过这个类&#xff0c;可以产生一个AXIS的一帧数据 类的实现大概如下 然后也…

springboot项目引入Sentinel熔断

本文是springboot项目+nacos进行引入,sentiel需自行按照部署 1.springboot包要是2.2.5或以上 <dubbo.version>2.7.7</dubbo.version><spring-boot.version>2.2.5.RELEASE</spring-boot.version><chainwork-boot.version>1.0.5-SNAPSHOT</ch…

# 利刃出鞘_Tomcat 核心原理解析(十一)-- Tomcat 附加功能 WebSocket -- 2

利刃出鞘_Tomcat 核心原理解析&#xff08;十一&#xff09;-- Tomcat 附加功能 WebSocket – 2 一、Tomcat专题 - WebSocket - 案例 - 登录功能 1、在项目 dzs168_chat_room 中&#xff0c;导入 tomcat 项目依赖&#xff08; dzs168_chat_room/web/lib/ &#xff09; idea -…

Javascript 使用中点查找矩形的角(Find Corners of Rectangle using mid points)

考虑一个矩形 ABCD&#xff0c;我们给出了边 AD 和 BC 中点&#xff08;分别为 p 和 q&#xff09;的坐标以及它们的长度 L&#xff08;AD BC L&#xff09;。现在给定参数&#xff0c;我们需要打印 4 个点 A、B、C 和 D 的坐标。 例子&#xff1a; 输入&#xff1a;p (1,…

python数据分析库

python数据分析库之Numpy笔记 导入numpy模块 import numpy as np通过列表创建一个数组 arr np.array([1,2,3,4,5]) # 输出 array([1, 2, 3, 4, 5])使用type函数查看数组对象类型 type(arr) # 输出 <class numpy.ndarray> 使用dtype属性查看数组元素的数据类型 arr…

VS Code配置使用Python详细步骤

以下是在VS Code中配置和使用Python的详细步骤&#xff1a; 下载并安装Python&#xff1a;首先需要从Python官方网站&#xff08;https://www.python.org/downloads/&#xff09;下载并安装Python的最新版本。根据您的操作系统选择合适的安装程序并按照提示进行安装。 安装VS …

6、关于Medical-Transformer

6、关于Medical-Transformer Axial-Attention原文链接&#xff1a;Axial-attention Medical-Transformer原文链接&#xff1a;Medical-Transformer Medical-Transformer实际上是Axial-Attention在医学领域的运行&#xff0c;只是在这基础上增加了门机制&#xff0c;实际上也就…

OpenCV:Python计算机视觉库详解

/ OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它提供了丰富的编程功能&#xff0c;包括但不限于图像处理、视频分析、对象检测、图像分割、机器学习等。OpenCV在Python中通过cv2模块提供接口&…

链表算法题(下)

在链表算法题&#xff08;上&#xff09;长中我们已经学习了一系列的链表算法题&#xff0c;那么在本篇中我们将继续来学习链表的算法题&#xff0c;接下来就继续来破解链表的算法题吧&#xff01; 1.相交链表 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 通过以上…

如何阅读PyTorch文档及常见PyTorch错误

如何阅读PyTorch文档及常见PyTorch错误 文章目录 如何阅读PyTorch文档及常见PyTorch错误阅读PyTorch文档示例常见Pytorch错误Tensor在不同设备上维度不匹配cuda内存不足张量类型不匹配 参考 PyTorch文档查看https://pytorch.org/docs/stable/ torch.nn -> 定义神经网络 torc…

【Linux】多线程:POSIX库、线程管理、线程ID

目录 一、POSIX线程库 二、线程ID 三、动态库加载 四、再谈线程ID 一、POSIX线程库 原生库&#xff1a;指的是操作系统自带的库&#xff0c;如POSIX线程库&#xff0c;在类Unix系统中通常是原生支持的。这些库是操作系统的一部分&#xff0c;提供了系统级的线程管理功能。 …

k8s相关技术栈

文章目录 一、k8s技术栈核心组件常见工具和服务生态系统 二、k8s服务组件控制平面组件节点组件附加组件和服务 三、k8s 常见资源核心资源扩展资源 四、系列文档其他参考 一、k8s技术栈 Kubernetes&#xff08;常被简称为 K8s&#xff0c;其中 “K” 代表 “Kubernetes” 的首字…

如何给Maven添加阿里云镜像

进入maven目录&#xff0c;点击conf文件夹&#xff0c;里面有个settings.xml文件&#xff0c;在mirrors标签下添加如下配置 <mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http:…