1. cat:size可以有不一样的
#合并与分割1:cat
# 情景1:[class1-4,students,scores] [class5-9.students,scores]
# 解法1:
print("示例一:")
a=torch.rand(4,32,8)#[class1-4,students,scores]
b=torch.rand(5,32,8)#[class5-9.students,scores]
sum=torch.cat([a,b],dim=0)#表示在索引为0的维度上进行合并:4+5=9
print(sum.shape)#torch.Size([9, 32, 8])
print("示例二:")
a1=torch.rand(4,3,32,32)
a2=torch.rand(5,3,32,32)
print(torch.cat([a1,a2],0).shape)#[9,3,32,32]
a3=torch.rand(4,1,32,32)
#print(torch.cat([a1,a3],0).shape)#无法进行合并,因此索引1处一个是3,一个是1,不相同
print(torch.cat([a1,a3],1).shape)#[4,4,32,32]
a1=torch.rand(4,3,16,32)
a2=torch.rand(4,3,16,32)
print(torch.cat([a1,a2],2).shape)#[4,3,32,32]
2. stack:size必须完全一样
#合并与分割:stack:新增加一个维度,size=2
# 情景:班级1:32个学生,8门课成绩,班级2:32个学生,8门课成绩。两个班级进行合并,数据完全一致且不能发生变化
a1=torch.rand(4,3,16,32)
a2=torch.rand(4,3,16,32)
print(torch.cat([a1,a2],2).shape)#torch.Size([4, 3, 32, 32])
print(torch.stack([a1,a2],2).shape)#torch.Size([4, 3, 2, 16, 32])
a1=torch.rand(32,8)
a2=torch.rand(32,8)
print(torch.stack([a1,a2],0).shape)#torch.Size([2, 32, 8])
3. split:按照长度分割
#合并与分割:split
print("示例一:")
a=torch.rand(32,8)
b=torch.rand(32,8)
c=torch.stack([a,b],0)
print(c.shape)#torch.Size([2, 32, 8])
aa,bb=c.split([1,1],0)#任意分配
print(aa.shape," ",bb.shape)#torch.Size([1, 32, 8]) torch.Size([1, 32, 8])
aa,bb=c.split(1,0)#拆分出的数量:0索引对应的值为2,2/1=2 拆分成两个
print(aa.shape," ",bb.shape)#torch.Size([1, 32, 8]) torch.Size([1, 32, 8])
#aa,bb=c.split(2,0)#not enough values to unpack (expected 2, got 1)
#print(aa.shape," ",bb.shape) 报错
print("示例二:")
c=torch.rand(6,32,8)
aa,bb,cc=c.split(2,0)#分成三个班级,0对应的值是6,6/2=3,分成三组
print(aa.shape," ",bb.shape," ",cc.shape)#torch.Size([2, 32, 8]) torch.Size([2, 32, 8]) torch.Size([2, 32, 8])
aa,bb,cc=c.split([1,3,2],0)#班级1是优秀班,班级2-4是良好班,班级5-6是普通班
print(aa.shape," ",bb.shape," ",cc.shape)#torch.Size([1, 32, 8]) torch.Size([3, 32, 8]) torch.Size([2, 32, 8])
4. chunk:按照数目分割
#合并与分割:chunk:按照数目划分
c=torch.rand(5,32,8)
aa,bb,cc=c.chunk(3,0)#按照分割成的数量进行划分,分成3个班级
print(aa.shape," ",bb.shape," ",cc.shape)#torch.Size([2, 32, 8]) torch.Size([2, 32, 8]) torch.Size([1, 32, 8])