1 先看看官方中英文doc:

torch.Tensor.permute (Python method, in torch.Tensor)

1.1 permute(dims)

将tensor的维度换位。

参数: - __dims__ (int ..*) - 换位顺序

例:

>>> x = torch.randn(2, 3, 5)

>>> x.size()

torch.Size([2, 3, 5])

>>> x.permute(2, 0, 1).size()

torch.Size([5, 2, 3])

1.2 permute(*dims) → Tensor

Permute the dimensions of this tensor.

Parameters: *dims (int...) – The desired ordering of dimensions

Example:

>>> x = torch.randn(2, 3, 5)

>>> x.size()

torch.Size([2, 3, 5])

>>> x.permute(2, 0, 1).size()

torch.Size([5, 2, 3])

2 pytorch permute的使用

permute函数功能还是比较简单的,下面主要介绍几个细节点:

2.1 transpose与permute的异同

Tensor.permute(a,b,c,d, ...):permute函数可以对任意高维矩阵进行转置,但没有 torch.permute() 这个调用方式, 只能 Tensor.permute():

>>> torch.randn(2,3,4,5).permute(3,2,0,1).shape

torch.Size([5, 4, 2, 3])

torch.transpose(Tensor, a,b):transpose只能操作2D矩阵的转置,有两种调用方式;

另:连续使用transpose也可实现permute的效果:

>>> torch.randn(2,3,4,5).transpose(3,0).transpose(2,1).transpose(3,2).shape

torch.Size([5, 4, 2, 3])

>>> torch.randn(2,3,4,5).transpose(1,0).transpose(2,1).transpose(3,1).shape

torch.Size([3, 5, 2, 4])

从以上操作中可知,permute相当于可以同时操作于tensor的若干维度,transpose只能同时作用于tensor的两个维度;

2.2 permute函数与contiguous、view函数之关联

contiguous:view只能作用在contiguous的variable上,如果在view之前调用了transpose、permute等,就需要调用contiguous()来返回一个contiguous copy;

一种可能的解释是:有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式;

判断ternsor是否为contiguous,可以调用torch.Tensor.is_contiguous()函数:

import torch

x = torch.ones(10, 10)

x.is_contiguous() # True

x.transpose(0, 1).is_contiguous() # False

x.transpose(0, 1).contiguous().is_contiguous() # True

另:在pytorch的最新版本0.4版本中,增加了torch.reshape(),与 numpy.reshape() 的功能类似,大致相当于 tensor.contiguous().view(),这样就省去了对tensor做view()变换前,调用contiguous()的麻烦;

3 permute与view函数功能demo

import torch

import numpy as np

a=np.array([[[1,2,3],[4,5,6]]])

unpermuted=torch.tensor(a)

print(unpermuted.size()) # ——> torch.Size([1, 2, 3])

permuted=unpermuted.permute(2,0,1)

print(permuted.size()) # ——> torch.Size([3, 1, 2])

view_test = unpermuted.view(1,3,2)

print(view_test.size()) # ——> torch.Size([1, 3, 2])

利用函数 permute(2,0,1) 可以把 Tensor([[[1,2,3],[4,5,6]]]) 转换成:

tensor([[[ 1, 4]],

[[ 2, 5]],

[[ 3, 6]]]) # print(permuted)

如果使用view(1,3,2) 可以得到:

tensor([[[ 1, 2],

[ 3, 4],

[ 5, 6]]]) # print(view_test)

5 参考

python中permute_Pytorch之permute函数相关推荐

  1. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  2. python函数分几种_简单了解Python中的几种函数

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...

  3. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用...

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  4. python中的高阶函数

    python中的高阶函数 文章目录: 1 什么是高阶函数? 1.1 高阶函数:一个函数的`函数名`作为参数传给另外一个函数 1.2 高阶函数:一个函数返回值(return)为另外一个`函数` 2 py ...

  5. Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略

    Python编程语言学习:python中与数字相关的函数(取整等).案例应用之详细攻略 目录 python中与数字相关的函数 1.对小数进行向上取整 1.1.利用numpy库 1.2.利用math库

  6. Python中字符串常用处理函数

    ** Python中字符串常用处理函数 ** 1.len( )函数 用len( )函数计算字符串的长度 2.strip( )函数 删除字符串两边的空白符(包括:'\n'.'\t'.'\r') 注:只能 ...

  7. 【Python】Python中str()和repr()函数的区别

    作用 在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即 str() 或者 repr() . 区别与使用 参考文章:Python 中 str() 和 repr() 函数的 ...

  8. python中比较重要的几个函数_Python 几个重要的内置函数 python中的内置函数和关键字需要背过吗...

    python重要的几个内置函数用法 python内置函数什么用忘不掉的是回忆,继续的是生活,错过的,就当是路过吧.来来往往身边出现很多人,总有一个位置,一直没有变.看看温暖的阳光,偶尔还是会想一想. ...

  9. python items函数用法,Python中dictionary items()系列函数的用法实例

    本文实例讲述了Python中dictionary items()系列函数的用法,对Python程序设计有很好的参考借鉴价值.具体分析如下: 先来看一个示例: import html # availab ...

最新文章

  1. 线索二叉树(c/c++)
  2. Sklearn(v3)——朴素贝叶斯(2)
  3. 实现权限控制_在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制
  4. 字符串的动态顺序结构(C/C++语言)
  5. IBM X System ServerGuide 8.41 服务器 系统安装 引导盘
  6. 硬盘分区模式gpt改成mbr模式_系统硬盘gpt转换的操作方法
  7. linux过滤端口抓包_linux抓包命令tcpdump
  8. 初识Zigbee协议栈及其安装
  9. 如何对计算机进行硬盘的区分,电脑如何区分和转换磁盘gpt和mbr
  10. python条形图的间距_如何减少堆积条形图中条形图之间的间距?
  11. 7-3 求最小码距(完整版) (10 分)
  12. HackTheBox::Doctor
  13. 计算机中f4的应用,Excel中F4键的9个功能,提高90%工作效率
  14. 私有云是伪命题:真正的私有云 ≈ 公有云
  15. 校园网拨号上网一直掉线但实际网络通路是连接着的
  16. 钱多多第二阶段冲刺04
  17. CSS基础(7)- 盒模型
  18. 电信计算机知识考试,2019中国电信计算机专业知识模拟试卷 --- 答案解析(九)...
  19. HTML:列表文字颜色与列表嵌套
  20. php java bridge 安装_浅谈在linux下安装php-java-bridge

热门文章

  1. VIM安装YCM插件的详细步骤
  2. Python疑似循环导入报错解决方法
  3. iOS开发 UIImage图片拼接
  4. 震惊!!!一眼就能看懂的getBoundingClientRect用法!!!
  5. html 共享文件夹,手把手教你win7系统怎么共享文件夹
  6. 墨者学院_BeesCMS系统漏洞分析溯源
  7. ABP学习实践(十六)--领域驱动设计(DDD)回顾
  8. 超八千人报名!HCSD华为云开发者实战营圆满收官!
  9. 详谈大模型训练和推理优化技术
  10. 计算机应用文档格式化怎么弄,Win7电脑磁盘格式化怎么弄