看了网上一堆解释,有用相互交换来解释的,我看了半天也看不出所以然来。心想着自己试验一下。

  numpy.transpose的用法很简单:假如你有一个四维的数组,那么四个维度就是0,1,2,3。风格会像下面这样:

>>>A = np.ones((1, 32, 30, 3))
>>>A.shape
(1, 30, 32, 3)
>>>A.transpose(0,3,1,2)

  如你所见,transpose是ndarray的类方法,输入是四个维度的排列,那么这四个维度的排列一定蕴含着交换维度的“规则”。有两个可能(合理)的想法:

  1. 以上面这个例子来说,0, 3, 1, 2分别是第 1, 2, 3, 4 个位置参数。那么transpose的作用就是将原本的第 1, 2, 3, 4维替换到所给的位置,即:原来的第0维调换到0号位置即第0维,原来的第1维调换到3号位置即第3维,所以结果应该是 shape_after = (1, 32, 3, 30)。但是事实并不是如此,why?这不,还有第二种可能的解释

  2. 原来不是有四个维度吗,分别有标记,即0, 1, 2, 3维,那么我们对维度进行调换的过程不就是对这个标签排序的过程吗?那么(0,3,1,2)的意思就是以这样的顺序:第0维,第3维,第1维,第2维的顺序来组成一个新的数组,所以结果应该是 shape_after = (1, 3, 30, 32)。运行之后正好是这样~~

>>>A = np.ones((1, 32, 30, 3))
>>>A.shape
(1, 30, 32, 3)
>>>A.transpose(0,3,1,2).shape
(1, 3, 30, 32)

  再举个栗子:

>>>A = np.array([[[1,2],[3,4]],[[4,5],[6,7]]])
>>>A
array([[[1, 2],
[3, 4]], [[4, 5],
[6, 7]]])
>>>A.transpose(0,2,1)
array([[[1, 3],
[2, 4]], [[4, 6],
[5, 7]]])

  按上面的理论来解释,第一维不动,后两维交换。结果发现两个2×2的矩阵都被转置,而它们好好的并在一起。这不就是我们期待的效果吗?

  总结一下:一个数组原先是有第0,1,2...维的。transpose做的事情就是让这些维度“排个序”,从而达到交换维度的目的。你可能会觉得它与reshape很像,但是其实区别蛮大。reshape是改变了numpy数组元素的“解释”方式,而transpose则显式修改了数据的相对位置,这也是为什么它的英文和“矩阵”转置是一样的原因。

numpy中transpose的功能的更多相关文章

  1. Python Numpy中transpose()函数的使用

    在Numpy对矩阵的转置中,我们可以用transpose()函数来处理. 这个函数的运行是非常反常理的,可能会令人陷入思维误区. 假设有这样那个一个三维数组(2*4*2): array ([[[ 0, ...

  2. numpy中transpose和swapaxes函数讲解

    1 transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数. 我们看如下一个numpy的数组: arr=np.arange(16).reshape( ...

  3. numpy中的np.round()取整的功能和注意

    numpy中的np.round()取整的功能和注意 功能 np.round() 是对浮点数取整的一个函数,一般的形式为 np.round(a, b),其中a为待取整的浮点数,b为保留的小数点的位数 注 ...

  4. Python数据分析--Numpy常用函数介绍(6)--Numpy中矩阵和通用函数

    在NumPy中,矩阵是 ndarray 的子类,与数学概念中的矩阵一样,NumPy中的矩阵也是二维的,可以使用 mat . matrix 以及 bmat 函数来创建矩阵. 一.创建矩阵 mat 函数创 ...

  5. numpy中的广播

    目录 广播的引出 广播的原则 数组维度不同,后缘维度的轴长相符 数组维度相同,其中有个轴为1 参考: 广播的引出  numpy两个数组的相加.相减以及相乘都是对应元素之间的操作. import num ...

  6. Python numpy中矩阵的用法总结

    关于Python Numpy库基础知识请参考博文:https://www.cnblogs.com/wj-1314/p/9722794.html Python矩阵的基本用法 mat()函数将目标数据的类 ...

  7. numpy中的ndarray方法和属性

    原文地址 NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是 ...

  8. numpy中min函数

    numpy提供的数组功能比较常用,NumPy中维数被称为轴,轴数称为秩. import numpy as np 比如a = np.array([[1, 5, 3], [4, 2, 6]]) a.min ...

  9. Numpy中扁平化函数ravel()和flatten()的区别

    在Numpy中经常使用到的操作由扁平化操作,Numpy提供了两个函数进行此操作,他们的功能相同,但在内存上有很大的不同. 先来看这两个函数的使用: from numpy import * a = ar ...

随机推荐

  1. kubeadm 搭建kubernetes集群环境

    需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...

  2. MySQL/MariaDB随笔二

    mariaDB的二进制安装:系统版本和MariaDB版本 [root@ ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@ ~ ...

  3. [JavaWeb基础] 004.用JSP + SERVLET 进行简单的增加删除修改

    上一次的文章,我们讲解了如何用JAVA访问MySql数据库,对数据进行增加删除修改查询.那么这次我们把具体的页面的数据库操作结合在一起,进行一次简单的学生信息操作案例. 首先我们创建一个专门用于学生管 ...

  4. Flask 蓝图进行路由分发.md

    Flask 蓝图进行路由分发 Flask虽然说是一个轻型web框架,但也总不能用一个py文件写完全部view吧,所以我们要把路由分到不同的py文件中.这就需要用到蓝图了. 一 创建一个py文件 用于处 ...

  5. MySQL8.0 忘记密码、重置密码

    修改my.cnf [mysqld] 域中添加skip-grant-tables 重启mysqld服务 systemctl restart mysqld 重新使用空密码登录,直接敲回车 mysql -u ...

  6. CE未知数值修改

    一样,用植物大战僵尸测试.来搜索修改向日葵生产阳光的CD值. 由于开始并不知道向日葵cd的初始值,所以用CE搜索未知的初始值 返回游戏,每次向日葵晃一下搜索一下减少的值. 锁定修改为0发现成功. 然后 ...

  7. Rocket - interrupts - Parameters

    https://mp.weixin.qq.com/s/eD1_hG0n8W2Wodk25N5KnA 简单介绍interrupts相关的Parameters. 1. IntRange 定义一个中断号区间 ...

  8. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  9. Window10:不能建立到远程计算机的连接,你可能需要更改此连接的网络设置。

    一,右键我的电脑点击管理. 二,在系统工具中找到设备管理,在设备管理中找到网络适配器. 三,在网络适配器中找到WAN Miniport(IP) 四,找到WAN Miniport(IP)右键放心卸载,作 ...

  10. Java实现 LeetCode 598 范围求和 II(最小值相乘)

    598. 范围求和 II 给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作. 操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义 ...