numpy.transpose对三维数组的转置方法


Posted in Python onApril 17, 2018

如下所示:

import numpy as np

三维数组

arr1 = np.arange(16).reshape((2, 2, 4)) 
#[[[ 0 1 2 3] 
# [ 4 5 6 7]] 
 
# [[ 8 9 10 11] 
# [12 13 14 15]]] 
 
arr2=arr1.transpose((1,0,2)) 
#[[[ 0 1 2 3] 
# [ 8 9 10 11]] 
# 
# [[ 4 5 6 7] 
# [12 13 14 15]]]

正序为(0,1,2),数组为

#[[[ 0 1 2 3] 
# [ 4 5 6 7]] 
 
# [[ 8 9 10 11] 
# [12 13 14 15]]]

为什么进过tanspose(1,0,2),数组变为

#[[[ 0 1 2 3] 
# [ 8 9 10 11]] 
# 
# [[ 4 5 6 7] 
# [12 13 14 15]]]

仔细观察之后,可以看到转置后的数组和转置前的数组的区别就是第一页的第二行和第二页的第一行对换了,可是为什么?

当我用arr1[0,1,0],索引值为4

当我用arr2[1,0,0],索引值为4

对比索引参数表的变化和正序和转置序的不同似乎存在某种联系

对于arr1数组,索引参数表[0,0,x]可以表示第一页的第一行,当前两个参数对换之后,同一个元素的索引参数表并没有变化

故arr2的第一页第一行和arr1的第一页第一行相同

对于arr1数组,索引参数表[0,1,x]可以表示第一页第二行,当前两个参数对换之后,同一个元素的索引值比如[0,1,0]变为[1,0,0],

这就是解释了索引值4的索引参数表的不同

大概就是这个思路所以transpose(1,0,2),数组的第一页第二行和第二页第一行对换

后面的四种转置方式也大致是这个思路,仔细观察一下,理解起来应该不难

arr3=arr1.transpose((0,2,1)) 
 
# [[[ 0 4] 
# [ 1 5] 
# [ 2 6] 
# [ 3 7]] 
# 
# [[ 8 12] 
# [ 9 13] 
# [10 14] 
# [11 15]]] 
 
arr4=arr1.transpose((2,0,1)) 
#[[[ 0 4] 
# [ 8 12]] 
# 
# [[ 1 5] 
# [ 9 13]] 
# 
# [[ 2 6] 
# [10 14]] 
# 
# [[ 3 7] 
# [11 15]]]

这里要注意的是,arr4数组变成4页,这是因为页码和行码对换之后,

页码从数量2,变成了4

而行码从数量4,变成了2

arr5=arr1.transpose((2,1,0)) 
#[[[ 0 8] 
# [ 4 12]] 
# 
# [[ 1 9] 
# [ 5 13]] 
# 
# [[ 2 10] 
# [ 6 14]] 
# 
# [[ 3 11] 
# [ 7 15]]] 
 
arr6=arr1.transpose((1,2,0)) 
#[[[ 0 8] 
# [ 1 9] 
# [ 2 10] 
# [ 3 11]] 
# 
# [[ 4 12] 
# [ 5 13] 
# [ 6 14] 
# [ 7 15]]]

另外,转置(2,0,1)可以看成,先转置(0,2,1)再转置(1,0,2)

转置(2,1,0)可以看成,先转置(1,0,2),然后转置(0,2,1),最后转置(1,0,2)

转置(1,2,0)可以看成,先转置(1,0,2),在转置(0,2,1)

代码可以写成

arr4=arr1.transpose(0,2,1).transpose(1,0,2)
#[[[ 0 4]
# [ 8 12]]
#
# [[ 1 5]
# [ 9 13]]
#
# [[ 2 6]
# [10 14]]
#
# [[ 3 7]
# [11 15]]]

结果一样!

以上这篇numpy.transpose对三维数组的转置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中的type()方法的使用
May 21 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
Python探索之Metaclass初步了解
Oct 28 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
Python类中self参数用法详解
Feb 13 Python
python如何调用java类
Jul 05 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
python获取酷狗音乐top500的下载地址 MP3格式
Apr 17 #Python
Python中的上下文管理器和with语句的使用
Apr 17 #Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 #Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
Apr 17 #Python
Numpy掩码式数组详解
Apr 17 #Python
对numpy中布尔型数组的处理方法详解
Apr 17 #Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 #Python
You might like
php 生成唯一id的几种解决方法
2013/03/08 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
详解js的六大数据类型
2016/12/27 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
Python实现不规则图形填充的思路
2020/02/02 Python
西部世纪面试题
2014/12/05 面试题
竞聘演讲稿范文
2014/01/12 职场文书
成绩报告单家长评语
2014/12/30 职场文书
安阳殷墟导游词
2015/02/10 职场文书
POST提交数据常见的四种方式
2022/01/18 HTML / CSS
Golang 结构体数据集合
2022/04/22 Golang