pytorch --- tensor.permute()和torch.transpose()

tensor.permute(dim1, dim2, dim3, …)

permute可以对任意高维矩阵进行转置.但只有 tensor.permute() 这个调用方式

x = torch.rand(2,3,4)
print("x.shape:", x.shape)
x = x.permute(2,1,0)
print("x.shape:", x.shape)

输出:

x.shape: torch.Size([2, 3, 4])
x.shape: torch.Size([4, 3, 2])
[Finished in 1.0s]

例2:

t.rand(2,3,4,5).permute(3,2,0,1).shape
Out[669]: torch.Size([5, 4, 2, 3])

总结
传入permute方法的参数是维度, 未进行变换前的dim是[0, 1, 2]的方式, 转换后表示将第0维度和第2维度调换

torch.transpose(tensor, dim1, dim2)

transpose只能操作2D矩阵的转置(就是每次transpose只能在两个维度之间转换,其他维度保持不变)。有两种调用方式。连续使用transpose也可实现permute的效果

torch.transpose(Tensor, 1, 0)
t.rand(2,3,4,5).transpose(3,0).transpose(2,1).transpose(3,2).shape
Out[672]: torch.Size([5, 4, 2, 3])
t.rand(2,3,4,5).transpose(1,0).transpose(2,1).transpose(3,1).shape
Out[670]: torch.Size([3, 5, 2, 4])

transpose和permute的区别

主要区别是transpose只能在两个维度之间转换, permute可以一下转换好几个维度

参考
PyTorch 高维矩阵转置 Transpose 和 Permute

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
torch.transpose() 和 torch.permute() 都是 PyTorch 中用于变换张量维度的函数,它们的区别在于: torch.transpose() 函数是对张量的转置操作,只支持二维(矩阵)和三维(批量矩阵)张量的转置。对于二维张量,可以使用该函数将其转置;对于三维张量,可以指定转置的两个维度进行转置。例如: ``` import torch x = torch.randn(3, 4) print(x) # tensor([[ 2.0514, 1.8634, -0.0375, -1.1761], # [-1.3048, 0.0905, 0.3555, 0.2998], # [-0.5564, 0.4689, -0.8771, 0.9331]]) y = torch.transpose(x, 0, 1) print(y) # tensor([[ 2.0514, -1.3048, -0.5564], # [ 1.8634, 0.0905, 0.4689], # [-0.0375, 0.3555, -0.8771], # [-1.1761, 0.2998, 0.9331]]) z = torch.randn(2, 3, 4) print(z) # tensor([[[ 0.4673, 0.1136, -1.3368, -0.1990], # [-0.5333, 0.0768, -0.6232, -0.8085], # [-1.2438, 1.8073, -0.6008, -1.0195]], # # [[ 0.4232, -0.2118, 1.2122, 0.7345], # [-1.3797, -0.3909, -0.2965, -1.3328], # [-0.8473, -0.6902, 0.1941, -0.8746]]]) w = torch.transpose(z, 0, 1) print(w) # tensor([[[ 0.4673, 0.1136, -1.3368, -0.1990], # [ 0.4232, -0.2118, 1.2122, 0.7345]], # # [[-0.5333, 0.0768, -0.6232, -0.8085], # [-1.3797, -0.3909, -0.2965, -1.3328]], # # [[-1.2438, 1.8073, -0.6008, -1.0195], # [-0.8473, -0.6902, 0.1941, -0.8746]]]) ``` torch.permute() 函数可以对张量的任意维度进行重新排列,可以对任意维度的张量进行操作。例如: ``` import torch x = torch.randn(2, 3, 4) print(x) # tensor([[[-1.1819, 0.6551, 0.3769, -0.7894], # [ 0.2819, -0.5533, -0.2477, -0.8851], # [-0.6033, -1.4273, -0.2664, -0.5853]], # # [[-1.0286, -1.7711, -0.5401, 0.5417], # [-0.4733, 2.4179, 0.0829, 0.7627], # [-0.4668, 0.0573, 0.2071, -0.5846]]]) y = x.permute(2, 0, 1) print(y) # tensor([[[-1.1819, 0.2819, -0.6033], # [-1.0286, -0.4733, -0.4668]], # # [[ 0.6551, -0.5533, -1.4273], # [-1.7711, 2.4179, 0.0573]], # # [[ 0.3769, -0.2477, -0.2664], # [-0.5401, 0.0829, 0.2071]], # # [[-0.7894, -0.8851, -0.5853], # [ 0.5417, 0.7627, -0.5846]]]) ``` 可以看到,torch.permute() 函数可以对张量的任意维度进行重新排列,而 torch.transpose() 函数只能对二维和三维张量进行转置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值