11_拼接与拆分,cat,stack,split,chunk
1.11.拼接与拆分
1.11.1.cat
1.11.2.Stack
1.11.3.split
1.11.4.chunk
1.11.拼接与拆分
1.11.1.cat
numpy中使用concat,在pytorch中使用更加简写的 cat
完成一个拼接
两个向量维度相同,想要拼接的维度上的值可以不同,但是其它维度上的值必须相同。
举个例子:还是按照前面的,想将这两组班级的成绩合并起来
a[class 1-4, students, scores]
b[class 5-9, students, scores]
# -*- coding: UTF-8 -*-import torcha = torch.rand(4, 32, 8)
b = torch.rand(5, 32, 8)print(torch.cat([a, b], dim=0).shape)
"""输出结果:torch.Size([9, 32, 8])
结果就是9个班级的成绩
"""
理解cat:
行拼接:[4, 4] 与 [5, 4] 以 dim=0(行)进行拼接 —> [9, 4] 9个班的成绩合起来。
列拼接:[4, 5] 与 [4, 3] 以 dim=1(列)进行拼接 —> [4, 8] 每个班合成8项成绩
理解Cat
# -*- coding: UTF-8 -*-import torcha1 = torch.rand(4, 3, 32, 32)
a2 = torch.rand(5, 3, 32, 32)
print(torch.cat([a1, a2], dim=0).shape) # 合并第1维 理解上相当于合并batch
"""
输出结果:torch.Size([9, 3, 32, 32])
"""a2 = torch.rand(4, 1, 32, 32)
print(torch.cat([a1,a2],dim=1).shape) # 合并第2维 理解上相当于合并为 rgba
"""
输出结果:torch.Size([4, 4, 32, 32])
"""a1 = torch.rand(4, 3, 16, 32)
a2 = torch.rand(4, 3, 16, 32)
print(torch.cat([a1, a2], dim=3).shape) # 合并第3维 理解上相当于合并照片的上下两半
"""
输出结果:torch.Size([4, 3, 16, 64])
"""a1 = torch.rand(4, 3, 32, 32)
print(torch.cat([a1, a2], dim=0).shape)
"""
RuntimeError: Sizes of tensors must match except in dimension 0. Got 32 and 16 in dimension 2 (The offending index is 1)
"""
1.11.2.Stack
创造一个新的维度(代表了新的组别)
要求两个tensor的size完全相同
# -*- coding: UTF-8 -*-import torcha1 = torch.rand(4, 3, 16, 32)
a2 = torch.rand(4, 3, 16, 32)
print(torch.cat([a1, a2], dim=2).shape) # 合并照片的上下部分
"""
输入结果:torch.Size([4, 3, 32, 32])
"""# 添加了一个维度 一个值代表上半部分,一个值代表下半部分。 这显然是没有cat合适的。
print(torch.stack([a1, a2],dim=2).shape)
"""
输入结果:torch.Size([4, 3, 2, 16, 32])
"""a = torch.rand(32, 8)
b = torch.rand(32, 8)
# 将两个班级的学生成绩合并,添加一个新的维度,这个维度的每个值代表一个班级。显然是比cat合适的。
print(torch.stack([a,b],dim=0).shape)
"""
输出结果:torch.Size([2, 32, 8])
"""
1.11.3.split
按长度进行拆分:单元长度/数量
长度相同给一个固定值
长度不同给一个列表
# -*- coding: UTF-8 -*-import torcha = torch.rand(32, 8)
b = torch.rand(32, 8)
c = torch.rand(32, 8)
d = torch.rand(32, 8)
e = torch.rand(32, 8)
f = torch.rand(32, 8)
s = torch.stack([a, b, c, d, e, f], dim=0)
print(s.shape)
"""
输出结果:torch.Size([6, 32, 8])
"""
aa,bb = s.split(3, dim=0) # 按数量切分,可以使用一个常数
print(aa.shape, bb.shape)
"""
输出结果:torch.Size([3, 32, 8]) torch.Size([3, 32, 8])
"""
cc, dd, ee = s.split([3, 2, 1], dim=0) # 按单位长度切分,可以使用一个列表
print(cc.shape, dd.shape, ee.shape)
"""
输出结果: torch.Size([3, 32, 8]) torch.Size([2, 32, 8]) torch.Size([1, 32, 8])
看到结果第一列,分别是:3,2,1
"""print(s)ff, gg = s.split(6, dim=0) # 只切了一半,有一半不存在,所以报错
"""
ValueError: not enough values to unpack (expected 2, got 1)
"""
1.11.4.chunk
按照量进行拆分
# -*- coding: UTF-8 -*-import torcha = torch.rand(32, 8)
b = torch.rand(32, 8)
c = torch.rand(32, 8)
d = torch.rand(32, 8)
e = torch.rand(32, 8)
f = torch.rand(32, 8)
s = torch.stack([a, b, c, d, e, f], dim=0)
print(s.shape)
"""
输出结果:torch.Size([6, 32, 8])
"""aa, bb = s.chunk(2, dim=0)
print(aa.shape, bb.shape)
"""
输出结果:torch.Size([3, 32, 8]) torch.Size([3, 32, 8])
"""cc, dd = s.split(3, dim=0)
print(cc.shape, dd.shape)
"""
输出结果:torch.Size([3, 32, 8]) torch.Size([3, 32, 8])
"""
注意:对于按数量切分:chunk中的参数是要切成几份;split的常量是每份有几个。
11_拼接与拆分,cat,stack,split,chunk相关推荐
- pytorch拼接与拆分
** 一.拼接 ** cat/stack cat在指定的维度上进行连接: stack创建了新的维度进行连接. In [1]: import torchIn [2]: a = torch.rand(4, ...
- 【OpenCV 例程200篇】11. 图像通道的拆分(cv2.split)
[OpenCV 例程200篇]11. 图像通道的拆分(cv2.split) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更 ...
- 【Kotlin】字符串操作 ① ( 截取字符串函数 substring | 拆分字符串函数 split | 解构语法特性 )
文章目录 一.截取字符串函数 substring 二.拆分字符串函数 split 一.截取字符串函数 substring Kotlin 中提供了 截取字符串函数 substring , 可接收 Int ...
- pytorch拼接函数:torch.stack()和torch.cat()--详解及例子
原文链接: https://blog.csdn.net/xinjieyuan/article/details/105205326 https://blog.csdn.net/xinjieyuan/ar ...
- [SqlServer]数据库中自定义拆分字符串函数Split()
经常我们要用到批量操作时都会用到字符串的拆分,郁闷的是SQL Server中却没有自带Split函数,所以我们只能自己动手来解决一下.为了减少和数据库的通讯次数,我们都会利用这种方法来实现批量操作. ...
- opencv通道拆分与合并:split和merge
原文:http://blog.csdn.net/omuyejingfeng1/article/details/25685141 [cpp] view plaincopyprint? #include& ...
- jsp java 分离,java与jsp页面的字符串拼接和拆分
在java代码编写过程中经常需要对字符串进行操作,本人鉴于这种情况对此类操作进行总结,希望给自己以后查询带来方便的同时给广大同仁一个参考. 第一类,java代码中的字符串截取 方法1.如果 Stri ...
- Vue中使用el-tag标签实现输入多个字符串实现新增和修改回显(字符数组拼接和拆分)
场景 实现对某任务的起点,途径点,终点进行管理,其中途径点可以是多个. 效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的 ...
- 分形之拆分三角形(Split Triangle)
前面讲了谢尔宾斯基三角形,它是不停地将一个三角形拆分三个与之相似的三角形.这一节给大家展示的图形是将一个等腰钝角三角形不停地拆分两个与之相似的三角形. 核心代码: static void SplitT ...
最新文章
- GetSystemMetrics()函数的用法
- 流程控制--for序列
- 地图上制作线路的动画_魔兽争霸重制版不只是表面上这么简单,新版编辑器制作地图更容易...
- 去除字符串中的html标记及标记中的内容
- [code] spectral cluster
- 取值方法_我国细骨料试验方法标准分析及修订建议
- 图像转换为二维数组存入DSP6748
- Unicode、UTF-8 和 ISO8859-1到底有什么区别(转载)
- 用户可以改变计算机功能键吗,电脑键盘快捷键怎么更改
- lm016l c语言编程,基于MCS51-LM016L (液晶屏)
- contes 7.6安装后网络问题解决方案
- Default process group has not been initialized, please make sure to call init_process_group
- TFTP 服务器脚本
- 2022年GPS广播星历精密星历如何下载
- 虹科解决方案 | 如何快速解决CAN与CAN FD之间通信的问题
- chromium浏览器_轻松下载便携式Chromium浏览器
- 排查生产环境下CPU飙高的原因
- Win10镜像安装net3.5
- CSP-J/S2022游寂寞记
- dble配置mysql主从同步
热门文章
- 80后,天才程序员, Facebook 第一任 CTO,看看开挂的人生到底有多变态?
- PyInstaller库函数
- Java 设计模式之外观模式
- Java对象的访问定位
- VTK:八叉树可视化用法实战
- boost::spirit模块使用 phoenix 进行实际表达式评估的语法和语义操作的测试程序
- boost::hana::second用法的测试程序
- boost::geometry::detail::overlay::get_relative_order用法的测试程序
- boost::contract模块实现move的测试程序
- VTK:可视化之Wireframe