PyTorchにおける2大コア転置関数transpose()とpermute()
差を気にする人は【3.違う点】を直接見ることができます
前言
この2つの関数は、次元を交換する操作です.些細な違いがある
1.公式文書
関数は、入力行列 input(Tensor)-テンソルを入力し、 を入力します. dim 0(int)-転置された1次元、デフォルト0、オプション dim 1(int)-2 D、デフォルト1、オプション
tensorの次元をシフトします.
パラメータ: dims(int...*)-シフト順、必ず を記入します.
2.同一点は、いずれも回転後のマトリクスを返します. はいずれも高緯行列を操作することができ、
3.相違点
まず、後で使用するデータを定義します.合法性が異なる
第2点の例を参照操作
例を挙げる である.
例えば、後の
4.まとめ
最も重要な違いは上の3点目だと思います.
また、簡単なデータは
前言
pytorch
で転置するための関数はこの2つだけですtranspose()
permute()
この2つの関数は、次元を交換する操作です.些細な違いがある
1.公式文書
transpose()
torch.transpose(input, dim0, dim1, out=None) → Tensor
関数は、入力行列
input
の回転を返す.交換次元dim0
およびdim1
パラメータ:permute()
permute(dims) → Tensor
tensorの次元をシフトします.
パラメータ:
2.同一点
permute
は高次元でより機能的である.3.相違点
まず、後で使用するデータを定義します.
# x,dim=0 2,dim=1 3
x = torch.randn(2,3) 'x.shape → [2,3]'
# y,dim=0 2,dim=1 3,dim=2 4
y = torch.randn(2,3,4) 'y.shape → [2,3,4]'
torch.transpose(x)
合法、x.transpose()
合法.tensor.permute(x)
は合法ではなく、x.permute()
は合法です.第2点の例を参照
dim
違い:transpose()
は一度に2つの次元しか操作できません.permute()
は多次元データを一度に操作することができ、permute()
のパラメータがint*
であるため、すべての次元数を入力しなければならない.例を挙げる
# transpose
x.transpose(0,1) 'shape→[3,2] '
x.transpose(1,0) 'shape→[3,2] '
y.transpose(0,1) 'shape→[3,2,4]'
y.transpose(0,2,1) 'error, '
# permute()
x.permute(0,1) 'shape→[2,3]'
x.permute(1,0) 'shape→[3,2], shape x.transpose(1,0) '
y.permute(0,1) "error "
y.permute(1,0,2) 'shape→[3,2,4]'
transpose()
のうちdim
には数の大きさの区別がない.permute()
のうちのdim
は数ある大小区分例えば、後の
shape
に注意してください.# transpose, dim
x1 = x.transpose(0,1) 'shape→[3,2] '
x2 = x.transpose(1,0) ' ,shape→[3,2] '
print(torch.equal(x1,x2))
' True ,value shape '
# permute()
x1 = x.permute(0,1) ' transpose,shape→[2,3] '
x2 = x.permute(1,0) 'shape→[3,2] '
print(torch.equal(x1,x2))
'False, transpose '
y1 = y.permute(0,1,2) ' ,shape→[2,3,4] '
y2 = y.permute(1,0,2) 'shape→[3,2,4] '
y3 = y.permute(1,2,0) 'shape→[3,4,2] '
4.まとめ
最も重要な違いは上の3点目だと思います.
また、簡単なデータは
transpose()
でいいのですが、個人的には直感的ではなく、指向性が弱いと思います.複雑な次元はpermute()
を用いることができ、次元の変化に対しては一般的により正確である.