Numpy中转置transpose、T和swapaxes的实例讲解


Posted in Python onApril 17, 2018

利用Python进行数据分析时,Numpy是最常用的库,经常用来对数组、矩阵等进行转置等,有时候用来做数据的存储。

在numpy中,转置transpose和轴对换是很基本的操作,下面分别详细讲述一下,以免自己忘记。

In [1]: import numpy as np 
 
In [2]: arr=np.arange(16).reshape(2,2,4) 
 
In [3]: arr 
Out[3]: 
array([[[ 0, 1, 2, 3], 
    [ 4, 5, 6, 7]], 
 
    [[ 8, 9, 10, 11], 
    [12, 13, 14, 15]]])

如上图所示,将0-15放在一个2 2 4 的矩阵当中,得到结果如上。

现在要进行装置transpose操作,比如

In [4]: arr.transpose(1,0,2) 
Out[4]: 
array([[[ 0, 1, 2, 3], 
    [ 8, 9, 10, 11]], 
 
    [[ 4, 5, 6, 7], 
    [12, 13, 14, 15]]])

结果是如何得到的呢?

每一个元素都分析一下,0位置在[0,0,0],转置为[1,0,2],相当于把原来位置在[0,1,2]的转置到[1,0,2],对0来说,位置转置后为[0,0,0],同理,对1 [0,0,1]来说,转置后为[0,0,1],同理我们写出所有如下:

其中第一列是值,第二列是转置前位置,第三列是转置后,看到转置后位置,再看如上的结果,是不是就豁然开朗了?

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

再看另一个结果:

In [20]: arr.T
Out[20]:
array([[[ 0, 8],
    [ 4, 12]],
    [[ 1, 9],
    [ 5, 13]],
    [[ 2, 10],
    [ 6, 14]],
    [[ 3, 11],
    [ 7, 15]]])
In [21]: arr.transpose(2,1,0)
Out[21]:
array([[[ 0, 8],
    [ 4, 12]],
    [[ 1, 9],
    [ 5, 13]],
    [[ 2, 10],
    [ 6, 14]],
    [[ 3, 11],
    [ 7, 15]]])

再对比转置前后的图看一下:

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

瞬间就明白转置了吧!其实只要动手写写,都很容易明白的。另外T其实就是把顺序全部颠倒过来,如下:

In [22]: arr3=np.arange(16).reshape(2,2,2,2)
In [23]: arr3
Out[23]:
array([[[[ 0, 1],
     [ 2, 3]],
    [[ 4, 5],
     [ 6, 7]]],
    [[[ 8, 9],
     [10, 11]],
    [[12, 13],
     [14, 15]]]])
In [24]: arr3.T
Out[24]:
array([[[[ 0, 8],
     [ 4, 12]],
    [[ 2, 10],
     [ 6, 14]]],
    [[[ 1, 9],
     [ 5, 13]],
    [[ 3, 11],
     [ 7, 15]]]])
In [25]: arr3.transpose(3,2,1,0)
Out[25]:
array([[[[ 0, 8],
     [ 4, 12]],
    [[ 2, 10],
     [ 6, 14]]],
    [[[ 1, 9],
     [ 5, 13]],
    [[ 3, 11],
     [ 7, 15]]]])

转置就是这样子,具体上面aar3转置前后的位置,就不写了。

下面说说swapaxes,轴对称。

话不多,上结果

In [27]: arr.swapaxes(1,2) 
Out[27]: 
array([[[ 0, 4], 
    [ 1, 5], 
    [ 2, 6], 
    [ 3, 7]], 
 
    [[ 8, 12], 
    [ 9, 13], 
    [10, 14], 
    [11, 15]]]) 
 
In [28]: arr.transpose(0,2,1) 
Out[28]: 
array([[[ 0, 4], 
    [ 1, 5], 
    [ 2, 6], 
    [ 3, 7]], 
 
    [[ 8, 12], 
    [ 9, 13], 
    [10, 14], 
    [11, 15]]])

发现了吧,其实swapaxes其实就是把矩阵中某两个轴对换一下,不信再看一个:

In [29]: arr3
Out[29]:
array([[[[ 0, 1],
     [ 2, 3]],
    [[ 4, 5],
     [ 6, 7]]],
    [[[ 8, 9],
     [10, 11]],
    [[12, 13],
     [14, 15]]]])
In [30]: arr3.swapaxes(1,3)
Out[30]:
array([[[[ 0, 4],
     [ 2, 6]],
    [[ 1, 5],
     [ 3, 7]]],
    [[[ 8, 12],
     [10, 14]],
    [[ 9, 13],
     [11, 15]]]])
In [31]: arr3.transpose(0,3,2,1)
Out[31]:
array([[[[ 0, 4],
     [ 2, 6]],
    [[ 1, 5],
     [ 3, 7]]],
    [[[ 8, 12],
     [10, 14]],
    [[ 9, 13],
     [11, 15]]]])

哈哈,只要动手做做,会发现其实没有那么困难,不能只看。

纸上得来终觉浅,绝知此事要躬行!共勉!

以上这篇Numpy中转置transpose、T和swapaxes的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的词法分析与语法分析
May 18 Python
Python中的类与对象之描述符详解
Mar 27 Python
python数据结构之图深度优先和广度优先实例详解
Jul 08 Python
Python实现快速多线程ping的方法
Jul 15 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
详解python tkinter教程-事件绑定
Mar 28 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
解读python logging模块的使用方法
Apr 17 #Python
numpy中的高维数组转置实例
Apr 17 #Python
numpy.transpose对三维数组的转置方法
Apr 17 #Python
python获取酷狗音乐top500的下载地址 MP3格式
Apr 17 #Python
Python中的上下文管理器和with语句的使用
Apr 17 #Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 #Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
Apr 17 #Python
You might like
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
js技巧--转义符"\"的妙用
2007/01/09 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
python和php哪个容易学
2020/06/19 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
一些Solaris面试题
2015/12/22 面试题
机电系毕业生求职信
2014/07/11 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
人事任命通知书
2015/04/21 职场文书
Python之matplotlib绘制折线图
2022/04/13 Python
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python