Pytorch学习(3):Tensor合并、分割与基本运算

2023-10-30


前言

Pytorch学习笔记第三篇,关于Tensor的合并(cat/stack)、分割(split/chunk)与基本运算。


一、合并Cat/Stack

1.Cat

Tensor中cat是contract的缩写,代表着两个张量Tensor在制定维度上进行合并,这就要求这两个张量Tensor在其余维度的长度一致。

代码如下(示例):

import torch
#1 cat
a=torch.rand(5,32,8)
b=torch.rand(4,32,8)
c=torch.cat([a,b],dim=0) #将a,b在0维上合并 ->[9.32.8]

2.Stack

stack也可以用于Tensor的合并,但区别于cat,stack会在指定索引上创造一个新维度,因此stack要求原来的两个张量Tensor必须维度形状完全一致。
代码如下(示例):

#2 stack 创造一个新的维度
a=torch.rand(32,8)
b=torch.rand(32,8)
c=torch.stack([a,b],dim=0) #在0维增加新的维度->[2,32,8],其中c[0]=a,c[1]=b
#dim!=0时则是后续维度与前面Tensor的后续部分按维度匹配。

二、分割Split/Chunk

1.Split

split对张量Tensor在指定维度上进行划分,split的划分是按照长度进行划分的,因此输入的参数为分割后各张量的长度。

代码如下(示例):

#3 split 按长度拆分
a=torch.rand(4,2,2)
aa,bb=a.split(2,dim=0) #dim=0上拆分为2个长度为2的张量,aa=a[:2],bb=a[2:]
aa,bb,cc=a.split([2,1,1],dim=0) #dim=0上拆分3个,aa=a[:2],bb=a[2],cc=a[3]

2.Chunk

chunk与split不同的在于,chunk需要指定的是分解后张量的个数,而非结果张量的长度
代码如下(示例):

#4 chunk 按个数拆分
a=torch.rand(8,2,2)
aa,bb=a.chunk(2,dim=0) #aa,bb->[4,2,2]

三、基本运算

1.加减乘除

对应于torch中add、sub、mul、div,且已经重载为+、-、*、/,具有广播机制。

代码如下(示例):

#1 基本运算符+-*/ 对应元素运算,拥有广播机制
a=torch.rand(5,3)
b=torch.rand(3)
a+b
a-b
a*b
a/b

2.矩阵乘法mm/@/matmul

矩阵乘法的运算分为mm、@、matmul。
其中mm只能作用于2维矩阵。
matmul可以作用于dim>=2的矩阵,其机理为最后两维做矩阵乘法,前面的维数保持不变或广播。
@是matmul的运算符重载,使用方便。
代码如下(示例):

#2 矩阵乘法 mm/matmul/@
c=torch.rand(5,3)
d=torch.rand(3,4)
e=torch.rand(784,3)

torch.mm(c,d) #只适用于dim=2,不建议使用
torch.matmul(c,d) #适用于任一情况
c@e.t() #运算符重载@为矩阵乘法

#dim>2时,最后两维做矩阵乘法@,前面的维数保持不变或广播
e=torch.rand(4,3,7,8)
f=torch.rand(4,1,8,9)
e@f #[4,3,7,9]
torch.matmul(e,f)

3.幂运算**

幂运算可以采用pow、sqrt、rsqrt进行,也可以采用重载运算符**进行。
pow可以指定幂指数
sqrt求平方根
rsqrt求平方根的倒数
代码如下(示例):

#3 幂运算**/pow
a**2 #平方
a**(0.5) #开方
a.pow(2)
a.sqrt()
a.rsqrt()

4.指数exp/对数log

exp求以e为底的指数结果。
log求自然对数ln运算结果。
log10、log2等为底数不同的对数运算
代码如下(示例):

#4 exp/log
torch.exp(a) #以e为底求幂
torch.log(a) #取对数ln
torch.log10(a) #取对数lg

5.近似floor/ceil/round/trunc/frac

对浮点Tensor进行近似。
floor:向下取整
ceil:向上取整
round:四舍五入
trunc:取整数部分
frac:取小数部分
代码如下(示例):

#5 近似floor/ceil/round/trunc/frac
g=torch.tensor(3.1415)
g.floor() #向下取整3.
g.ceil() #向上取整4.
g.trunc() #取整数部分3.(浮点)
g.frac() #取小数部分0.1415
g.roung() #四舍五入

6.裁剪(归化)clamp

clamp作用于张量每一个元素,将会指定范围,并将超出范围[min,max]的数据规范到min、max
代码如下(示例):

#6 clamp裁剪(将超出范围的数规范到min/max)
h=torch.rand(3,3)*10  #0-10之间随机浮点
h1=h.clamp(5)   #小于5的归化为5
h2=h.clamp(6,7) #小于6的归化为6,大于7的归化为7

总结

以上是Tensor的合并、分割与基本运算,下一篇计划为Tensor统计操作与高级操作。
2021.2.18

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch学习(3):Tensor合并、分割与基本运算 的相关文章

随机推荐

  • 网易云音乐评论抓取(js逆向)

    网易云音乐评论抓取 js逆向 本文通过分析网易云音乐的js加密 通过构造相关的参数 获取网易云音乐评论 所用语言和相关模块 python3 6 requests 网站特点分析 通过分析网站可知 评论获取的url https music 16
  • JavaScript和C++的一些显著差异和学习tips

    之前学习JS来做Vue Node js前后端 最近开始重新学习C 显然这两者的差异巨大 主要注意的点 C 的语法结构 while for JS中没有数据类型 而C 的数据类型需要学习 例如DWORD等等 面向对象 JavaScript的对象
  • 人工智能基础篇

    人工智能基础篇 本篇目录 一 人工智能 机器学习 深度学习的关系 1 关系图 2 人工智能 3 人类智能过程 4 机器学习 5 深度学习 二 人工智能研究的领域 三 人工智能的应用场景 1 计算机视觉 2 语音技术 3 自然语言处理 4 决
  • C++学习第二弹之整数数据类型

    本文主要介绍C 数 整数 包括创建变量和编写各种类型的常量 整数 不同C 数据类型使用不同的内存来存储整数 内存越大能够表示的数值就越大 同时有的类型可以表示正值和负值 有些不能表示负值 C 基本整型有char short int long
  • C++设计模式由浅入深(一)—— 继承和多态

    一 继承和多态 C 首先是一个面向对象的语言 对象是C 程序的基石 通过类的继承和派生 软件工程师可以自由表达对软件系统中各个部分之间的关系与交互逻辑 定义各个组件之间的接口和实现 有秩序地组织起数据结构和代码 本书的目的不是为了教授C 语
  • 项目——电子词典(客户端、服务器交互,字典导入,单词查询)

    一 项目要求 登录注册功能 不能重复登录 重复注册 单词查询功能 历史记录功能 存储单词 意思 以及查询时间 基于TCP 支持多客户端连接 采用数据库保存用户信息与历史记录 将dict txt的数据导入到数据库中保存 按下ctrl c退出客
  • Fiddler抓包工具总结

    序章 Fiddler是一个蛮好用的抓包工具 可以将网络传输发送与接受的数据包进行截获 重发 编辑 转存等操作 也可以用来检测网络安全 反正好处多多 举之不尽呀 当年学习的时候也蛮费劲 一些蛮实用隐藏的小功能用了之后就忘记了 每次去网站上找也
  • qt 智能指针介绍

    简介 Qt 提供了很多智能指针 比较常见的有 QPointer QSharedDataPointer QSharedPointer QWeakPointer 和 QScopedPointer 描述 QPointer 4 0 已经过时 可以被
  • php fastcgi,配置apache以fastcgi运行php

    apache默认是用自带的mod php模块运行php 现在我们介绍使用fastcgi来执行php脚本 先说下fastcgi的优点 Fastcgi的优点 从稳定性上看 fastcgi是以独立的进程池运行来cgi 单独一个进程死掉 系统可以很
  • 解决高德地图AMap is not defined

    传送门 https blog csdn net qq 36317441 article details 77187369 总结一下 就是将script 标签引入的高德地图地址 放到body中
  • Leetcode 面试题 01.06.字符串压缩(Compress String LCCI)

    Leetcode 面试题 01 06 字符串压缩 1 题目描述 Leetcode题目链接 字符串压缩 利用字符重复出现的次数 编写一种方法 实现基本的字符串压缩功能 比如 字符串aabcccccaaa会变为a2b1c5a3 若 压缩 后的字
  • 虚拟机占用磁盘越来越大的解决方案大总结

    原文链接 https blog csdn net Shine Su article details 119676646 作者 填坑小霸王 在电脑上安装Vmware 安装ubuntu16 04 进行开发 使用过程中没有在意 忽然有一天发现磁盘
  • 【esp32&lvgl】-2.1 # esp32移植lvgl7驱动st7789屏幕(ESP-IDF框架)

    目录 一 前言 二 代码 三 硬件说明 四 ESP IDF设置 重要 五 屏幕偏移修改驱动文件 参考资料 一 前言 前几天在ardiuno框架下基于platformIO用TFT eSPI库实现了lvgl库的移植 这种方法虽然在lvgl的版本
  • 电源系列1:LDO 基本 原理(一)

    微信公众号 工程师看海 后台回复 LDO仿真文件 转载请注明原文地址 https blog csdn net u013608300 article details 108994763 1 前言 目前市场上无论什么电子产品 只要涉及到电就必须
  • ssh 运行 java,通过ssh将Java应用程序作为后台进程运行

    I m currently developing a simple deployment script for vms running ubuntu All these machines are supposed to run a java
  • 基于Springboot的SSO单点登陆系统的登陆操作实战

    一 前言 1 使用环境 SpringBoot2 X MyBatis 基于redis存储的springSession 2 基础学习 关于SSO的基础学习可以参考该文章 单点登录 SSO 从原理到实现 代码风格使用的是晓风轻的代码规范 对于其中
  • c语言的文法,c语言实现First文法

    最近编译原理课程实验做LL 1 中的First和Follow文法的算法实现 百度了半天 要么是要钱 要么是觉得好复杂 作为学渣的我看不懂 那为了完成实验 只能自己慢慢搞出来 由于之前的课也没怎么听 研究这两个文法都用了好长时间 那么关于Fi
  • Maven下Druid连接池配置及使用

    1 在pom xml中导入架包及jdbc架包
  • 如何做一个成功的系统架构师

    首先 何谓系统架构师 IBM工程师的说明是 架构师的主要责任是提供开发人员和项目经理之间的共用沟通媒体 他们负责让业务规则及需求与工程实践及限制相适应 以确保成功 中文Wiki上的说明是 系统架构师负责设计系统整体架构 从需求到设计的每个细
  • Pytorch学习(3):Tensor合并、分割与基本运算

    文章目录 前言 一 合并Cat Stack 1 Cat 2 Stack 二 分割Split Chunk 1 Split 2 Chunk 三 基本运算 1 加减乘除 2 矩阵乘法mm matmul 3 幂运算 4 指数exp 对数log 5