Pytorch——拼接与拆分

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]

猜你喜欢

转载自blog.csdn.net/qq_42012782/article/details/124141501