Broadingcasting自动扩展
特点:
实现维度扩展
不需要拷贝数据
原理:
先在高维度上un squeeze一个维度,然后将维度为1的expend到相对应的维度
使用条件:
从低维度开始匹配所以如果操作是中间维度的运算,则需要手动unsqueeze低维度为1.
- 对应运算的维度要么为1,为1表示适用于所有其他维度
- 对应运算的维度与另一个操作数据的对应维度相同
- 对应维度不存在,空值,broadcast会自动unsqueeze
如:A = [class][students][scores] = [4][32][8]
B~1~ = [1] 此时表示对每个班的每个学生的每门课程分数都加1分
B~2~ = [8] 此时表示对每个班的每个学生的八门课程加上对应的分数(如:01010340)
B~3~ = [32][1] 因为要对student进行操作,所有低维度的1需要手动unsqueeze
B~4~ = [4] 此时不满足条件,无法判断是哪四门课程
拼接与拆分
cat()拼接
在原来的基础上叠加
in: a = torch.rand(4, 32, 8)
in: b = torch.rand(5, 32, 8) #除拼接维度外其他维度保持一致
in: torch.cat([a, b], dim=0).shape
out: torch.Size([9, 32, 8]) dim表示的是在第几个维度拼接,其他维度保持一致
stack()
创建一个新的维度
in: b = torch.rand(4, 32, 8)
in: c = torch.stack([a,b], dim = 0)
in: print(c.shape)
out: torch.Size([2, 4, 32, 8])
两个数据的维度必须完全一样,此时c[0]表示a,c[1]表示b
split()
根据长度拆分
拆分的长度一定要足够