pytorch的permute(dims) 函数的功能详解

有三块 二维矩阵 如下

把二维矩阵堆叠起来,就是三维 矩阵

这样的矩阵 从x方向看(0维)  有三块 记为3,每块从y方向看(1维)的行是3,从z方向看(2维)列也是3,故三维矩阵的尺寸就是(3,3,3)

permute(dims)是干啥的, 它是操作维度的,二维是转置,原三维不变的情况下(0,1,2),可以变(0,2,1),就是转置了

permute(dims)

  1. 参数dims用矩阵的维数代入,一般默认从0开始。即第0维,第1维等等
  2. 也可以理解为,第0块,第1块等等。当然矩阵最少是两维才能使用permute
  3. 如是两维,dims分别为是0和1
  4. 可以写成permute(0,1)这里不做任何变化,维数与之前相同
  5. 如果写成permute(1,0)得到的就是矩阵的转置
  6. 如果三维是permute(0,1,2)
  7. 0代表共有几块维度:本例中0对应着3块矩阵
  8. 1代表每一块中有多少行:本例中1对应着每块有2行
  9. 2代表每一块中有多少列:本例中2对应着每块有5列
  10. 所以是3块2行5列的三维矩阵
  11. 这些0,1,2并没有任何实际的意义,也不是数值,只是用来标识区别。有点类似于x,y,z来区分三个坐标维度,是人为规定好的
  12. 三维情况直接用下面的代码来给大家讲解
     

 举例:

>>> x2 = torch.linspace(1, 30, steps=30).view(3,2,5) #产生30个数,步长30,把这30个数组成x方向3块,每一快 y方向2个数,z方向5个数
>>> x2
tensor([[[ 1.,  2.,  3.,  4.,  5.],
         [ 6.,  7.,  8.,  9., 10.]],

        [[11., 12., 13., 14., 15.],
         [16., 17., 18., 19., 20.]],

        [[21., 22., 23., 24., 25.],
         [26., 27., 28., 29., 30.]]])
>>>
变化一:不改变任何参数
>>> b = x2.permute(0,1,2)   # b和x2矩阵一样
>>> b
tensor([[[ 1.,  2.,  3.,  4.,  5.],
         [ 6.,  7.,  8.,  9., 10.]],

        [[11., 12., 13., 14., 15.],
         [16., 17., 18., 19., 20.]],

        [[21., 22., 23., 24., 25.],
         [26., 27., 28., 29., 30.]]])
>>>

 变化二:0,1交换

>>> b1 = x2.permute(1,0,2)   仔细看看b1 与b的变化
>>> b1 
tensor([[[ 1.,  2.,  3.,  4.,  5.],
         [11., 12., 13., 14., 15.],
         [21., 22., 23., 24., 25.]],

        [[ 6.,  7.,  8.,  9., 10.],
         [16., 17., 18., 19., 20.],
         [26., 27., 28., 29., 30.]]])

变化二:1,2交换

>>> b2 = x2.permute(0,2,1)
>>> b2
tensor([[[ 1.,  6.],
         [ 2.,  7.],
         [ 3.,  8.],
         [ 4.,  9.],
         [ 5., 10.]],

        [[11., 16.],
         [12., 17.],
         [13., 18.],
         [14., 19.],
         [15., 20.]],

        [[21., 26.],
         [22., 27.],
         [23., 28.],
         [24., 29.],
         [25., 30.]]])
>>>

这个函数的功能 就是转置变换,元素大小和个数不变,就是矩阵的形式变化

参考:

torch中permute()函数用法_permute函数_ac不知深的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/Vertira/article/details/131459639