PyTorch:合并与分割

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])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值