描述
View和Permute函数都可以用来reshape(调整矩阵形状),本文主要用来测试其不同点。
实验
测试代码:
def test_view_permute():
origin = torch.arange(12).view(3, 4)
print(origin)
dest1 = origin.view(4, 3)
dest2 = origin.permute(1, 0)
print(f'dest1, {dest1}')
print(f'dest2, {dest2}')
输出结果:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
dest1, tensor([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
dest2, tensor([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
在控制台输出详细信息:
dest1.is_contiguous()
True
dest2.is_contiguous()
False
dest1.stride()
(3, 1)
dest2.stride()
(1, 4)
结论
使用View时,是在连续数据上进行reshape(原始数据origin[1][2]!=dest1[2][1]
);
使用Permute时,是在维度上做了变换,类似于转置T,(原始数据origin[1][2]==dest1[2][1]
)。