标签:dim tensor torch 合并 print shape Broadcasting 拆分 维度
broadcasting
它的功能就是能够实现自动维度的扩展,使两个tensor的shape相同,
也就是说节省了 unsqueeze 和 expand 操作,高效并且不需要复制数据,节省内存
关键思想
只有size一致才能进行对应位置元素的相加
如下图,第一行,两个tensor的shape相等,可以直接相加
第二行,第二个tensor根据第一个tensor扩张到相同shape,在复制数据对应相加
第三行, 两个tensor根据对方维度扩展到shape相同,相加
能否进行broadcasting
broadcasting 操作是从tensor的最后一个维度开始的
如果前面没有维度,那就补1直到两个tensor的维度相等,
然后判断 如果该tensor中某维度有size不为1的
· 与领一个tensor对应相同,可以broadcasting
· 不同就不能broadcasting
情形一:
情形二:
情形三:
合并
两种方法:cat , stack
cat
要保证要合并的tensor的维度相同,要合并的那一维size可以不一样,其他维size必须相等
使用方法:torch.cat ( [ ] , dim = )
将要合并的tensor放到一个列表中,指明合并的维度
a = torch.rand(4,32,8)
b = torch.rand(5,32,8)
d = torch.rand(2,32,8)
c = torch.cat([a,b,d],dim=0) #对第0维相加,其他一样
print(c.shape)
stack
条件:要合并的tensor所有的维度shape都相等
使用和cat差不多,不过是dim= 是指在哪一维增加一个维度
二者区别:
stack是创建一个新的维度,将要合并的tensor包在里面,
cat是对一个维度的扩张
a = torch.rand(24,36,48)
b = torch.rand(24,36,48)
c = torch.rand(24,36,48)
d = torch.stack([a,b,c],dim=1)
print(d.shape)
拆分
split是按长度来拆分的,chunk是按数量来拆分的
split
假如tensor A 需要拆分
可以 A.split ( num ,dim= )
num表示按照 num 的大小分割,dim表示对哪一维进行分割
或者 A.split ( [ ] ,dim= )
在列表中填具体的数字表示分割后这一维的shape,不过列表中数字之和要等于dim的shape
要根据拆分的个数接收对应的tensor
a = torch.rand(4,32,8)
b,c ,d,e= a.split(1,dim=0)
bb,cc = a.split([3,1],dim=0)
print(b.shape),print(c.shape)
print(bb.shape),print(cc.shape)
chunk
直接输入在哪个维度分为多少块
a = torch.rand(4,32,8)
b,c,d,e = a.chunk(4,dim=1) #将第一维拆分为4个tensor
print(b.shape),print(c.shape)
标签:dim,tensor,torch,合并,print,shape,Broadcasting,拆分,维度 来源: https://blog.csdn.net/m0_59310933/article/details/122754861
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。