1、cat 拼接
例子:两张成绩单的数据
第一张成绩单是班级1~4的成绩单
第二张成绩单是班级5~9的成绩单
a=torch.rand(4,32,8) #表示四个班级的成绩单
b=torch.rand(5,32,8) #表示五个班级的成绩单
#进行合并
torch.cat([a,b],dim=0).shape #第一个参数表示要合并社么数据,第二个参数表示要合并哪个维度上的数据;
#输出结果torch.Size([9,32,8])
注意:只有需要合并数据的维度的数值可以不一致,其他的数据需要一样
2、Stack 拼接
stack会创建一个新的维度
a1=torch.rand(4,3,16,32)
a2=torch.rand(4,3,16,32)
torch.cat([a1,a2],dim=2).shape #输出结果 [4,3,32,32]
torch.stack([a1,a2],dim=2).shape #输出结果 [4,3,2,16,32]
#在dim=2的维度上,也就是数值2,当取0的时候a1,当它取1的时候a2的值。,也就是新增加了一个维度,后面的维度保持一致;
a=torch.rand(32,8) #表示a班级有32个人,每个人有8门课程
b=torch.rand(32,8)#表示b班级有32个人,每个人有8门课程
torch.stack([a,b],dim=0).shape #输出结果 [2,32,8] 表示有两个班级,每个班级有32个人,每个人有8
门课程;
注意:维度的数值需要一致
3、Split
拆分,按长度开始拆分
a=torch.rand(32,8) #表示a班级有32个人,每个人有8门课程
b=torch.rand(32,8)#表示b班级有32个人,每个人有8门课程
torch.stack([a,b],dim=0).shape #输出结果 [2,32,8] 表示有两个班级,每个班级有32个人,每个人有8
门课程;
aa,bb=c.split([1,1],dim=0) #第一个参数表示要拆分为两个班级以1,1的形式,不再是固定的长度
#输出结果aa=[1,32,8] bb=[1,32,8]
aa,bb=c.split(1,dim=0)#第一个参数表示长度,每一个单元的长度是1,第二个参数表示操作的单元维度是0维度,
#输出结果aa=[1,32,8] bb=[1,32,8]
4、Chunk
拆分,按数量进行拆分
a=torch.rand(32,8) #表示a班级有32个人,每个人有8门课程
b=torch.rand(32,8)#表示b班级有32个人,每个人有8门课程
c=torch.stack([a,b],dim=0).shape #输出结果 [2,32,8] 表示有两个班级,每个班级有32个人,每个人有8
门课程;
aa,bb=c.chunk(2,dim=0)#第一个参数表示要拆分的数量
#输出结果aa=[1,32,8] bb=[1,32,8]
|