转置(transpose)和轴对换

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

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

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

In [1]: import numpy as np

In [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
形状 索引
2 0
2 1
3 2

所以说,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]]])

numpy之转置(transpose)和轴对换的更多相关文章

  1. Numpy 的数组转置和轴对换

    数组转置 转置(transpose)是重塑的一种特殊形式, 它返回的是源数据的视图(不会进行任何操作.)数组不仅有transpose,还要特殊的T属性 计算矩阵内积 高维数组transpose 详细讲 ...

  2. numpy数组转置与轴变换

    numpy数组转置与轴变换 矩阵的转置 >>> import numpy as np >>> arr=np.arange(15).reshape((3,5)) &g ...

  3. 解疑 Numpy 中的 transpose(转置)和swapaxes(两个轴转置变换)

    1.一维和二维数据 .T等同于.transopse 2.三维及更多维数据 对于 z 轴 与 x 轴的变换 In [40]: arr = np.arange(16).reshape((2, 2, 4)) ...

  4. Numpy三维数组的转置与交换轴

    二维数组的转置应该都知道,就是行列交换 而在numpy中也可以对三维数组进行转置,np.T 默认进行的操作是将0轴与2轴交换 本文主要对三位数组轴交换的理解上发表本人的看法. a = np.array ...

  5. Python numpy函数:transpose()

    transpose用于对高维数组进行转置,转置时候需要一个由轴编号组成的元组. 比如说三维的数组,那就对维度进行编号,也就是0,1,2:这样说可能比较抽象.这里的0,1,2可以理解为对shape返回元 ...

  6. numpy array转置与两个array合并

    我们知道,用 .T 或者 .transpose() 都可以将一个矩阵进行转置. 但是一维数组转置的时候有个坑,光transpose没有用,需要指定shape参数, 在array中,当维数>=2, ...

  7. python 矩阵转置transpose

    在读图片时,会用到这么的一段代码: image_vector_len = np.prod(image_size)#总元素大小,3*55*47 img = Image.open(path)       ...

  8. python数据处理——numpy_2

    上一次的学习了numpy的一些基础操作,今天接着学习numpy的高级索引.轴对换数值转置以及作图. #花式索引 import numpy as np ''' t = np.empty((8,4)) # ...

  9. numpy 中的axis轴问题

    在numpy库中,axis轴的问题比较重要,不同的值会得到不同的结果,为了便于理解,特此将自己的理解进行梳理 为了梳理axis,借助于sum函数进行! a = np.arange(27).reshap ...

随机推荐

  1. spark属性

    应用属性 属性名 缺省值 意义 spark.app.name (none) The name of your application. This will appear in the UI and i ...

  2. Spring学习笔记(四)--MVC概述

    一. 飞机 最近马来西亚航空370号班机事故闹得沸沸扬扬,情节整的扑朔迷离,连我在钻研springMVC平和的心情都间接的受到了影响.正当我在想这个MVC的处理过程可以怎样得到更好的理解呢?灰机,灰机 ...

  3. spring4-3-AOP-AspectJ注解-01-简单使用

    1.引入类库 <dependency> <groupId>org.springframework</groupId> <artifactId>sprin ...

  4. tp5 select回显

    <select name="role_id" id="" class="form-control" required> {vol ...

  5. NPOI读写Excel sheet操作

    QueryInfo dataInfo = new QueryInfo(); dataInfo.CustomSQL = $@" select t1.name name,t1.url url f ...

  6. HUST软测1504班第4周小组作业成绩:WordCount优化

    说明 本次公布的成绩为第四周作业的结果: 第4周小组作业:WordCount优化 博客推荐:本次作业有一位同学完成有创意,推荐优秀博客.(优秀博客不会对成绩带来正面或者负面影响)PS:做任何创新的任务 ...

  7. 基于AspNet Core2.0(测试版) 开发框架,包含简单的个人博客Demo

    大家好,最近离职了,利用闲暇时间就捣鼓了一个基于AspNet Core开发框架,分享出来希望能给AspNet Core学者带来一些帮助,同时也能跟大家一起学习.当然了,由于我的个人技术及经验的有限,框 ...

  8. Params应用

    有时候我们要想传递可变数量的参数改怎么办??Params给我们提供了一个很好的方法 Parmas: 1.只运用方法的最后一位参数 2.这个参数只能标志任意类型的一位数组 3.添加了params这个参数 ...

  9. kalilinux-漏洞评估

    Nessus\OpenVAS http://www.tenable.com/products/nessus/select-your-operating-system http://www.nessus ...

  10. 使用jasmine-node 进行NodeJs单元测试 环境搭建

    关于jasmine就不多说了,关于语法请参加官方文档.http://pivotal.github.io/jasmine/ 关于NodeJS的单元测试框架有多种,如果要在NodeJS中使用jasmine ...