如何对PyTorch张量进行跨步重塑:将(2,8)张量转为(4,4)张量
解决方案
可以通过PyTorch的view、transpose和reshape组合操作实现,一行代码就能搞定:
import torch x = torch.tensor([[0, 1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15]]) y = x.view(2, 2, 2, 2).transpose(1, 2).reshape(4, 4)
操作拆解
view(2, 2, 2, 2):把原始(2,8)的张量拆分为4维结构,维度含义为(行组, 块组, 块内行数, 块内列数)。这一步将每一行的8个元素分成2个(2,2)的小块,比如第一行的[0,1,2,3,4,5,6,7]会被拆成两个(2,2)块:[[0,1],[2,3]]和[[4,5],[6,7]]。transpose(1, 2):交换块组和块内行数两个维度,让同一行组内的小块按列方向拼接,这样第一行组的两个(2,2)块就变成了[[[0,1],[4,5]], [[2,3],[6,7]]],正好对应目标张量的前两行结构。reshape(4, 4):把4维张量扁平化回2维,得到最终的(4,4)形状。
运行后y的输出完全符合需求:
tensor([[ 0, 1, 4, 5], [ 2, 3, 6, 7], [ 8, 9, 12, 13], [10, 11, 14, 15]])
内容的提问来源于stack exchange,提问作者marukosan
相关产品推荐
相关产品推荐

