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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
深入浅析python继承问题
May 29 Python
深入解析Python中的__builtins__内建对象
Jun 21 Python
python 获取网页编码方式实现代码
Mar 11 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
Python方法的延迟加载的示例代码
Dec 18 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python实现搜索算法的实例代码
Jan 02 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
Python插件机制实现详解
May 04 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 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
深入了解php4(2)--重访过去
2006/10/09 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
Python heapq使用详解及实例代码
2017/01/25 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
python enumerate内置函数用法总结
2020/01/07 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
建筑公司员工自我鉴定
2014/04/08 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书