一文打通pytorch中几个常见的张量操作

server/2024/9/24 6:13:42/

在张量操作中,unsqueeze,squeeze,reshape,view

1. unsqueeze

  • 功能: 在指定维度上增加一个新的维度,通常用于将一维张量扩展为二维,以便符合批处理的要求。
  • 举例:
    python">import torchx = torch.tensor([1, 2, 3])  # Shape: (3,)
    y = x.unsqueeze(0)           # Shape: (1, 3)
    print(y)
    
    • 数值示例: x[1, 2, 3],形状为 (3,)。使用 unsqueeze(0) 后,形状变为 (1, 3),结果为 [[1, 2, 3]]

2. expand

  • 功能: 通过复制数据来扩展张量的尺寸,而不增加新的维度。它不会在内存中实际复制数据,而是通过广播机制实现。
  • 举例:
    python">import torchx = torch.tensor([1, 2, 3])   # Shape: (3,)
    y = x.unsqueeze(0)            # Shape: (1, 3)
    z = y.expand(3, 3)            # Shape: (3, 3)
    print(z)
    
    • 数值示例: y[[1, 2, 3]],形状为 (1, 3)。使用 expand(3, 3) 后,形状变为 (3, 3),结果为 [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

3. reshape

  • 功能: 改变张量的形状,只要元素的总数保持不变。
  • 举例:
    python">import torchx = torch.tensor([1, 2, 3, 4])  # Shape: (4,)
    y = x.reshape(2, 2)             # Shape: (2, 2)
    print(y)
    
    • 数值示例: x[1, 2, 3, 4],形状为 (4,)。使用 reshape(2, 2) 后,形状变为 (2, 2),结果为 [[1, 2], [3, 4]]

4. view

  • 功能: 类似于 reshape,但要求张量在内存中是连续的。它改变张量的形状,但不改变数据的存储方式。
  • 举例:
    python">import torchx = torch.tensor([1, 2, 3, 4])  # Shape: (4,)
    y = x.view(2, 2)                # Shape: (2, 2)
    print(y)
    
    • 数值示例: x[1, 2, 3, 4],形状为 (4,)。使用 view(2, 2) 后,形状变为 (2, 2),结果为 [[1, 2], [3, 4]]

5. squeeze

  • 功能: 去除张量中尺寸为 1 的维度。
  • 举例:
    python">import torchx = torch.tensor([[[1, 2, 3]]])  # Shape: (1, 1, 3)
    y = x.squeeze()                  # Shape: (3,)
    print(y)
    
    • 数值示例: x[[[1, 2, 3]]],形状为 (1, 1, 3)。使用 squeeze() 后,形状变为 (3,),结果为 [1, 2, 3]

总结:

  • unsqueeze: 增加一个新维度。示例:从 [1, 2, 3] 变为 [[1, 2, 3]]
  • expand: 扩展现有维度的大小。示例:从 [[1, 2, 3]] 变为 [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
  • reshape: 重新排列数据的形状。示例:从 [1, 2, 3, 4] 变为 [[1, 2], [3, 4]]
  • view: 与 reshape 类似,但有内存连续性要求。示例:从 [1, 2, 3, 4] 变为 [[1, 2], [3, 4]]
  • squeeze: 删除尺寸为 1 的维度。示例:从 [[[1, 2, 3]]] 变为 [1, 2, 3]

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

相关文章

Qt实现自定义控件的两种方式之提升法

一:提升Qt设计师界面类 第一步:添加新文件选择Qt设计师界面类 第二步:选择界面模板 看自己需求,一般不需要怎么更改 第三步:为设计师界面类起一个类名 类名不能全是小写,要不然后面会出错 此时可以添加一…

Java如何使用 HTTP 请求下载图片

工具类: public FileInputStream fileDownload(String fileLink) throws Exception {System.out.println("开始下载"fileLink);// 转码中文URL url new URL(encodeURLChinese(fileLink));System.out.println("fileLink:"url);// 开始下载Trust…

Redis的六种淘汰策略详解

Redis作为一种高性能的键值对存储系统,其数据全部存储在内存中,因此内存管理对Redis的性能至关重要。当Redis的内存使用达到上限时,就需要通过淘汰策略来释放内存空间,以便存储新的数据。Redis提供了六种不同的淘汰策略&#xff0…

15.2 Scikit-learn简介与常用模型

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

【第九节】python中xml解析和json编解码

目录 一、Python XML 解析 1.1 什么是XML 1.2 Python 对 XML 的解析方法 1.3 SAX解析xml 1.4 xml.dom解析xml 1.6 ElementTree解析XML 二、Python编解码json 2.1 什么是json 2.2 使用json 库 2.3 使用第三方库Demjson 一、Python XML 解析 1.1 什么是XML XML&#x…

Vue 应用实例的关键方法与配置案例二

目录 createApp createSSRApp app.mount app.unmount app.component app.directive Vue3.X自定义全局指令 Vue2.X自定义全局指令 app.use app.mixin 非 VIP 用户能够免费下载博文资源 createApp 详见上一章节:Vue 应用实例的关键方法与配置案例一-CSDN博客 createSS…

数字化营销利器:企元数智小程序合规分销系统免费获取!

在当今数字化时代,营销策略已经成为企业成功的关键。为了帮助企业更好地实现数字化营销,企元数智小程序合规分销系统应运而生,成为了企业的得力助手。 企元数智小程序合规分销系统集合了先进的科技和创新理念,为企业营销带来了全新…

大厂进阶之二:React高级用法HOC、Hooks对比、异步组件

本文分文三部分: HOC高阶组件 higher order componentHooks 16.8版本后新增的钩子API异步组件使用lazy和suspense两个api实现组件代码打包分割和异步加载 一、HOC高阶组件 1、定义 高阶组件不是组件而是函数,是react中用于复用组件逻辑的高级技巧&am…