目录

  • 一、前言
  • 二、举例解释
    • 解释部分
    • 1、permute(0,1,2)
    • 2、permute(0,1,2) ⇒ permute(0,2,1)
    • 3、permute(0,2,1) ⇒ permute(1,0,2)
    • 4、permute(1,0,2) ⇒ permute(0,2,1)
  • 三、写在最后

一、前言

之前写了篇torch中permute()函数用法文章,没想到收藏和点赞还挺多的

那我就在详细的说一下permute函数里维度变化的详细过程

非常感谢@m0_46225327对本文案例更加细节补充

注意:

本文是这篇torch中permute()函数用法文章的补充内容

如果有精力可以把这篇文章阅读一下,能够更好的理解函数的维度变化过程

以及加深对输出结果的印象

二、举例解释

这里以比较经典的变化四做例子

先回顾一下变化四的内容:

————————————————分割线——————————————
变化四:0与2交换

b = x.permute(2,1,0)            # 交换块和列
print(b)
print(b.size())

此时参数0对应的3块经过permute已经变成了5块

参数2对应的5列已经变成了3列

————————————————分割线——————————————

解释部分

变化四中permute参数把(0,1,2)交换成了(2,1,0)

直观上看是直接把0和2两个位置直接交换

实际上两个参数交换包括了以下部分

维度变换重点

维度数值变换:(3,2,5)==>(3,5,2)==>(5,3,2)==>(5,2,3)
# 读者一定要考虑清楚下一行代表什么意思
函数中参数变换(0,1,2)==>(0,2,1)==>(1,0,2)==>(0,2,1)
# 第一个"==>" 变化为2和5交换,对应函数里的参数0不动,1和2交换 ,变换完后为(0,2,1),对应维度是(3,5,2)。重排序为(0,1,2)
# 第二个"==>" 变化为3和5交换,对应函数里的参数2不动,0和1交换,变换完后为(1,0,2),对应维度是(5,3,2)。重排序为(0,1,2)
# 第三个"==>" 变化为3和2交换,对应函数里的参数0不动,1和2交换,变换完后为(0,2,1),对应维度是(5,2,3)。重排序为(0,1,2)

或者看表格更容易理解些?

维度变换过程 维度数值变换 函数参数变换
(3,2,5) - (0,1,2)
(3,5,2) 2和5 (0,1,2)==> (0,2,1)
(5,3,2) 3和5 (0,1,2)==>(1,0,2)
(5,2,3) 3和2 (0,1,2)==>(0,2,1)

这里先给大家把代码放上来

便于大家验证理解

也可以先跳过代码部分直接看图片解释

import torchx = torch.linspace(1,30,steps=30).view(3,2,5)
print('x:',x)
print(x.size())# permute(0,1,2)==>permute(2,1,0)
# (3,2,5)==>(3,5,2)==>(5,3,2)==>(5,2,3)
#
# (0,1,2)==>(0,2,1)==>(1,0,2)==>(0,2,1)b1 = x.permute(0,2,1)
print('b1:',b1)
print(b1.size())b2 = b1.permute(2,0,1)
print('b2:',b2)
print(b2.size())b = b2.permute(2,1,0)
print('b:',b)
print(b1.size())

1、permute(0,1,2)


这部分就是(3,2,5)矩阵中原有的样子

2、permute(0,1,2) ⇒ permute(0,2,1)


这部分是把3块中的每一块矩阵进行转置操作,即行和列的交换

2行3列==>3行2列

3、permute(0,2,1) ⇒ permute(1,0,2)

这部分是列不动,把块和行交换

把第一块的五行分别写入变换后的五块中第一行

把第二块的五行分别写入变换后的五块中第二行

把第三块的五行分别写入变换后的五块中第三行

4、permute(1,0,2) ⇒ permute(0,2,1)


最后行列交换,即转置

三、写在最后

如果大家看起来还是比较难理解些

建议可以手写一下这个转换例子,真的一下就懂了

以下是我手写矩阵转化过程

torch中permute()函数用法补充内容(矩阵维度变化详细过程)相关推荐

  1. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  2. Matlab中repmat、permute函数用法

    repmat函数用法 复制和平铺矩阵 函数repmat 格式:  B = repmat(A, m, n) %将矩阵A复制m*n块,即B由m*n块A平铺而成 B = repmat(A, [m n])%与 ...

  3. python中permute_PyTorch中permute的用法详解

    PyTorch中permute的用法详解 permute(dims) 将tensor的维度换位. 参数:参数是一系列的整数,代表原来张量的维度.比如三维就有0,1,2这些dimension. 例: i ...

  4. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

  5. MATLAB中repmat函数用法

    1.语法 · 函数repmat B = repmat(A, m, n) %将矩阵A复制m*n块,即B由m*n块A平铺而成 B = repmat(A, [mn])%与上面一致 B = repmat(A, ...

  6. matlab stem函数坐标轴_MATLAB中stem函数用法

    stem(Y) 将数据序列Y从x轴到数据值按照茎状形式画出,以圆圈终止.如果Y是一个矩阵,则将其每一列按照分隔方式画出. stem(X,Y)在X的指定点处画出数据序列Y.  stem(...,'fil ...

  7. matlab stem 属性,matlab中stem函数用法_常见问题解析

    matlab中如何自定义图例_常见问题解析 matlab中自定义图例的方法:首先打开matlab软件:然后点击勾选按钮,新建一个文件并输入代码为"x = 0:pi/50:2*pi;" ...

  8. stem什么意思matlab,matlab中stem函数用法_常见问题解析,matlab

    matlab中如何自定义图例_常见问题解析 matlab中自定义图例的方法:首先打开matlab软件:然后点击勾选按钮,新建一个文件并输入代码为"x = 0:pi/50:2*pi;" ...

  9. php中 param,php中bind_param()函数用法分析

    本文实例讲述了php中bind_param()函数用法.分享给大家供大家参考,具体如下: 从字面上不难理解,绑定的参数:下面我通过一个绑定参数的例子讲一下: for example: bind_par ...

  10. python中max函数用法_Python中max函数用法实例分析

    Python中max函数用法实例分析 更新时间:2015年07月17日 15:45:09 作者:优雅先生 这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用 ...

最新文章

  1. buildroot管理uboot+kernel+rootfs
  2. ms project(第一篇笔记)
  3. 模型训练太慢?显存不够用?这个算法让你的GPU老树开新花
  4. 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程
  5. cs寄存器 x86 特权模式_Windows操作系统管理进程和线程:内核模式和用户模式
  6. mysql主库从库在同一台服务器_mysql数据库从一台服务器迁移到另一台服务器上...
  7. 《网络科学导论》——博弈模型笔记
  8. 免费手机电脑同屏神器——Mirroid
  9. MYSQL 经纬度 地理位置
  10. ElasticSearch服务器的搭建与使用
  11. JAVA微信小程序医院预约挂号小程序系统毕业设计 开题报告
  12. 【设计】01-15个漂亮的网站UI设计作品案例欣赏
  13. LeedCode 376. 摆动序列
  14. 数据分析:当回音哥唱music时,他在唱些什么~~~
  15. win7 任务栏 通知区域
  16. ntp服务restrict_NTP服务搭建详解一条龙
  17. sql server出生年月减去退休年月 计算年龄
  18. Linux实训项目二 用户和组的管理
  19. UE4蓝图流程控制:FlipFlop节点、DoOnce节点的使用
  20. word插入图片,嵌入型,无效果

热门文章

  1. unity3D使用User32.dll
  2. Lua调用c++ DLL 文件
  3. spring boot项目发送邮件
  4. 内部比较器:Comparable的定义使用
  5. 更新sdk_即构ZegoLiveRoom SDK版本更新,新增多项功能及自定义设置
  6. 百度seo排名点击器app_手机端百度搜索排名seo优化_百度移动端整站关键词排名优化...
  7. 如何添加、管理和删除PDF高亮文本?
  8. find命令使用及实例
  9. CentOS 6.5安装配置Nginx
  10. eclipse下搭建SSH整合环境(Struts2+Spring+Hibernate+maven)