当前位置:网站首页>torch中permute()函数用法补充内容(矩阵维度变化详细过程)
torch中permute()函数用法补充内容(矩阵维度变化详细过程)
2022-04-21 06:52:00 【ac不知深】
目录
一、前言
之前写了篇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 torch
x = 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)

最后行列交换,即转置
三、写在最后
如果大家看起来还是比较难理解些
建议可以手写一下这个转换例子,真的一下就懂了
以下是我手写矩阵转化过程

版权声明
本文为[ac不知深]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_41377182/article/details/124245005
边栏推荐
- php 判断是不是同一个月
- Introduction to zephyr 1.0 of Internet of things operating system zephyr (Introduction)
- leetcode题目--386.字典序排数,DFS
- Implementing AES encryption and decryption with PHP
- PHP two-dimensional array to one-dimensional array
- 从零开始自制实现WebServer(十五)---- 日志库部分完结啦 实用小件DOUBLE-BUFFERING优化异步写入性能
- 从零开始学习C语言日记——DAY27扫雷
- Regular Expressions
- Defer
- Plsql14 software package download, localization and registration
猜你喜欢

迅为i.MX6Q开发板Openwrt 文件系统构建

Flutter environment construction and other foundations

kubesphere3.0忘记admin的密码

Leetcode topic -- 120 Minimum length sum of triangles, simple DP

物联网操作系统Zephyr(入门篇)之1.0 Zephyr简介

【图像融合】基于拉普拉斯金字塔+小波变换实现图像融合含Matlab源码

leetcode 59. Spiral matrix II

Bluetooth Profile Specification之(AVRCP篇)5.1AVCTP的连接和释放

343. 求分解整数的乘积最大化Integer Break

网关与分布式id
随机推荐
为什么mysql里面设置符合主键它显示我错了?
PHP去除字符串开头或末尾逗号
leetcode 27. Removing Elements
. net core throws an error and writes it Txt file
云原生KubeSphere实战多租户系统实战
Solution to red flag with @ Autowired annotation in idea
Axure产品原型工具使用笔记
文件打包下载
php 二维数组转一维数组
Zephyr IOT operating system column summary
Introduction to zephyr 1.0 of Internet of things operating system zephyr (Introduction)
【牛客刷题18】 查找两个字符串a,b中的最长公共子串
Server deployment SVN environment
C语言指针进阶(1.一阶与二阶指针)
云服务器使用frp将本机(win10/win11)内网上的apache映射到外网
网关与分布式id
kubesphere3.0忘记admin的密码
Signals
php 文章关键字替换类
Hackmyvm integrated target | driftingblues-9 (end)