numpy之转置(transpose)和轴对换

转置(transpose)和轴对换

转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作)。

转置有三种方式,transpose方法、T属性以及swapaxes方法。

1 .T,适用于一、二维数组

In [1]: import numpy as npIn [2]: arr = np.arange(20).reshape(4,5)#生成一个4行5列的数组In [3]: arr
Out[3]:
array([[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9],[10, 11, 12, 13, 14],[15, 16, 17, 18, 19]])In [4]: arr.T #求转置
Out[4]:
array([[ 0,  5, 10, 15],[ 1,  6, 11, 16],[ 2,  7, 12, 17],[ 3,  8, 13, 18],[ 4,  9, 14, 19]])

2. 高维数组

对于高维数组,transpose需要用到一个由轴编号组成的元组,才能进行转置。

这里,着实好好理解了一下。开始的时候怎么都想不明白。因为他跟矩阵转置理解起来不太一样。

主要参考:
AbstractSky的博客
Albert Chen
经管之家

对多维数组来说,确定最底层的一个基本元素位置需要用到的索引个数即是维度。这句话的理解可以结合我索引和切片的那篇文章理解。

我是这样的理解的,比如说三维的数组,那就对维度进行编号,也就是0,1,2。这样说可能比较抽象。这里的0,1,2可以理解为对shape返回元组的索引。
比如:

In [59]: arr1 = np.arange(12).reshape(2,2,3)In [60]: arr1
Out[60]:
array([[[ 0,  1,  2],[ 3,  4,  5]],[[ 6,  7,  8],[ 9, 10, 11]]])In [61]: arr1.shape #看形状
Out[61]: (2, 2, 3) #说明这是一个2*2*3的数组(矩阵),返回的是一个元组,可以对元组进行索引,也就是0,1,2
形状索引
20
21
32

所以说,transpose参数的真正意义在于这个shape元组的索引。

那么它的转置就应该是


In [62]: arr1.transpose((1,0,2))
Out[62]:
array([[[ 0,  1,  2],[ 6,  7,  8]],[[ 3,  4,  5],[ 9, 10, 11]]])

比如,数值6开始的索引是[1,0,0],变换后变成了[0,1,0]
这也说明了,transpose依赖于shape

但是,对于为什么转置最后一个索引是不动的,颇为不解。数组或者说矩阵的这块有点太抽象了。虽然我线代成绩不错,但是这玩意不太一样啊。

3.swapaxes

虽然还有点不解的地方,但是,理解了上方那部分之后,swapaxes方法也就很好理解了。它接受一对轴编号。进行轴对换。其实也就是shape参数。

In [67]: arr2 = np.arange(16).reshape(2,2,4)           In [68]: arr2                                          
Out[68]:                                               
array([[[ 0,  1,  2,  3],                              [ 4,  5,  6,  7]],                             [[ 8,  9, 10, 11],                              [12, 13, 14, 15]]])                            In [69]: arr2.shape                                    
Out[69]: (2, 2, 4)                                     In [70]: arr2.swapaxes(1,2)                            
Out[70]:                                               
array([[[ 0,  4],                                      [ 1,  5],                                      [ 2,  6],                                      [ 3,  7]],                                     [[ 8, 12],                                      [ 9, 13],                                      [10, 14],                                      [11, 15]]])   In [4]: arr2.swapaxes(1,0)#转置,对比transpose(1,0,2)
Out[4]:
array([[[ 0,  1,  2,  3],[ 8,  9, 10, 11]],[[ 4,  5,  6,  7],[12, 13, 14, 15]]])                                 

转载于:https://www.cnblogs.com/sunshinewang/p/6893503.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-18541.html

如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网进行投诉反馈,一经查实,立即删除!


相关文章:

  • P2661 信息传递
  • 【solr基础教程之中的一个】Solr相关知识点串讲
  • Python练习5-正则表达式
  • 怎么把excel表格内的数据导入数据库?
  • Hibernate_01_初体验
  • java并发编程(1)并发程序的取消于关闭
  • hihoCoder - 1079 - 离散化 (线段树 + 离散化)
  • poj 2442 Sequence
  • bzoj 3676: [Apio2014]回文串
  • Linux ssh服务开启秘钥和密码认证
  • Spring Boot和Dubbo整合
  • ufldl学习笔记与编程作业:Linear Regression(线性回归)
  • Python-面向对象之一
  • 浅析我对代码规范的理解
  • Swift - 实现tableView单选系统样式
  • Problems with Ribbon/Feign/Zuul retry
  • 绝大多数人努力程度之低,根本轮不上拼天赋
  • GDTR与LDTR
  • c#之正则表达式
  • Makefile文件(一)_介绍
  • 高级控件 下(三)
  • ArcGIS Python实现Modis NDVI批量化月最大合成
  • crmjs区分窗口是否是高速编辑(2)
  • jQuery Validate验证框架(转载)
  • MD5生成
  • Python_代码练习_写一个判断是否为小数的函数
  • 异常处理-try catch
  • ES6中Number中的扩展
  • 20169302 2016-2017-2 《网络攻防实践》课程总结
  • 九度OJ1451题-信封错装
  • PHP compact
  • Selenium 方法封装 一
  • 访问win10的远程桌面(Remote Desktop)总是凭据或者用户密码错误
  • angular2 --使用DecimalPipe格式化数字
  • 【bzoj1520】[POI2006]Szk-Schools 费用流
  • JQ 按钮实现两种功能
  • 存储控制器和SDRAM 实验
  • Phalcon调试大杀器之phalcon-debugbar安装
  • python sys与shutil模块
  • netty学习指南
  • 关于人生观与方法论的两篇文章
  • Java 8 新特性:3-函数(Function)接口
  • 通过js控制层的动态隐藏
  • iOS自动布局高级用法 纯代码约束写法
  • vue组件(Vue+webpack项目实战系列之三)
  • 6.20
  • 产业企业和投资机会研究 沈阳新松机器人自动化股份有限公司(300024)
  • idea整个项目乱码解决办法
  • 从头认识java-16.4 nio的读与写(ByteBuffer的使用)
  • 宿命的PSS