首先说明,这个方法是博主在理解高维数组转置的transpose 方法时所提出的,因此严谨性和正确性有待考察,但私以为完全可以这样理解,因此做个记录,如果对你有帮助的话欢迎点赞收藏,如果认为有错误的话请提出批评,督促改进。


transpose方法是数组用来转置的一种方法,尤其对于高维数组,transpose需要得到一个由轴编号组成的元组才能对这些轴进行转置。那么是怎么根据这个轴来完成转置的呢?

我们来看下面这个三维数组:

arr = np.arange(16).reshape((2, 2, 4))
arrarray([[[ 0,  1,  2,  3],[ 4,  5,  6,  7]],[[ 8,  9, 10, 11],[12, 13, 14, 15]]])

arr进行转置:

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

以上面这个 2 组 2 行 4 列的三维数组为例,试图通过在笛卡尔坐标系下想象立方体的变换来理解,因此有下面的想法。首先要知道transpose的参数表示 shape 的形状,对于这个例子来说,即2[0]2[1]4[2],用transpose(1,0,2)转置后变为2[1]2[0]4[2]。这句话看起来很有道理,但究竟是怎么变换的呢?通过这句话仍然难以想象,所以我们把这个数组放在三维坐标下来看:

在这里我假设这个三维数组在空间中按上图的方式排列,数组里每个数字存放在一个小立方体中,更具体一点,我们的俯视图如下:

有了这个图就好理解了,我们通过transpose的方法,将数组的排列方式由2[0]2[1]4[2]变为了2[1]2[0]4[2],在坐标系中就是z[0]x[1]y[2]变为了z[1]x[0]y[2],也就是说交换了x轴和z轴!

整个过程中y轴没有参与,所以它们的纵坐标不会改变,为了简便表示,我们只考虑x轴和z轴。在这里我以小立方体的个数来作为坐标,即把它视为一个点来计算坐标。如果将 4 这个点的坐标在xOz(O为坐标原点)平面内视为(2,1),那么经过transpose后,它的坐标应变为(1,2),同理,和 4 同一行的数字也经过同样的变换。而数字 12 的坐标可视为(2,2),变换后仍为(2,2)

再回到上图中看,这时我们应该就很容易明白transpose这个方法对数组进行了怎样的变换:数组[4,5,6,7]和数组[8,9,10,11]xOz平面内横纵坐标互换,因此两个数组进行了位置交换。而数组[0,1,2,3]和数组[12,13,14,15]由于横纵坐标相同,所以交换后仍在原位置!

变换后的俯视图如下:

最后,将以立方体形式表示的数组以输入时候的顺序输出,就得到转换后的数组:

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

以上就是博主关于transpose这个方法的理解,至于更高维的变换,可以用类似的方式来思考,考虑为一个坐标变换问题,也许就可以更具体的理解到如何变换。


不足之处,欢迎指正。

numpy之高维数组的转置:transpose方法——通过几何体来迅速理解相关推荐

  1. Python中numpy读取高维数组中特定的行,列

    直接跑代码,看懂代码,跑一遍,你自然懂了. ''' 多维矩阵按括号的层级,从外向内,一次是第1,2,3,...维b[]内用逗号将各维分开,分别代表第1,2,3...维元素 逗号把数组分成两维度,左边是 ...

  2. Python NumPy 基础:数组和向量计算

    文章目录 1.1 NumPy 的ndarray:一种多维数组对象 创建ndarray ndarray数据类型 NumPy 数组的运算 基本的索引和切片 切片索引 布尔型索引 花式索引 数组转置和轴对换 ...

  3. python 数据分析5 NumPy 基础:数组和矢量计算

    系列文章:Python 数据分析 文章目录 五.NumPy 基础:数组和矢量计算 1.n维数组对象 ndarray 创建 dtype 数组运算 基本的索引和切片 一维数组 二维数组 布尔型索引 花式索 ...

  4. Python数据分析学习四 NumPy基础:数组和矢量计算

    Python数据分析学习系列四NumPy基础:数组和矢量计算 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下 ...

  5. python中numpy.array_python中数组(numpy.array)的基本操作

    本文部分内容参考Daetalus的博客. 为什么要用numpy Python中提供了list容器,可以当作数组使用.但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简 ...

  6. python三维数组转置_numpy.transpose对三维数组的转置方法

    如下所示: import numpy as np 三维数组 arr1 = np.arange(16).reshape((2, 2, 4)) #[[[ 0 1 2 3] # [ 4 5 6 7]] # ...

  7. numpy中矩阵的转置_NumPy矩阵transpose()-Python中数组的转置

    numpy中矩阵的转置 The transpose of a matrix is obtained by moving the rows data to the column and columns ...

  8. numpy维度交换_numpy之转置(transpose)和轴对换

    转置(transpose)和轴对换 转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作). 转置有三种方式,transpose方法.T属性以及swapaxes方法. 1 .T,适用于一 ...

  9. numpy中的转置Transpose和.T以及轴对换swapaxis

    简 介: 本文对于 numpy中的转置Transpose和.T以及轴对换swapaxis 中关于numpy矩阵的轴交换函数进行了测试.并对于深度学习中的图像数据进行处理. 参考文章:https://b ...

最新文章

  1. windows 切换 默认 jdk 版本
  2. JAVA.Properties了解一下
  3. nodejs登陆模拟
  4. 解决ubuntu下eclipse 经常崩溃的问题
  5. mysql 函数重载_[赋值]函数,变量,重载 ,_第1页_169IT
  6. p2psearcher怎么用
  7. RTP协议解析和H264码流提取
  8. ubuntu16.04初安装,ROS kinetic,安装ros,配置ros环境
  9. linux命令行连接蓝牙音箱,树莓派4b连接蓝牙音箱/耳机播放音乐 命令行
  10. 问卷星投票如何刷投票?【请勿非法使用】
  11. Acwing语法基础课第六次课-循环判断练习题,连续整数相加,约数,PUM,余数,六个奇数,乘法表,
  12. 工业质检-缺陷检测数据集
  13. html2day(合并单元格,有序、无序列表,input、select、textarea表单)
  14. Leecode-动态规划专题训练
  15. K2P没有无线信号LED灯不亮,居然成功修复
  16. 杂七杂八,乱七八糟的大杂烩!
  17. java实现创蓝短信
  18. C. Interesting Sequence
  19. RecyclerView实现多种布局样式
  20. 计算机输入法入门,电脑入门——第章 学习中文输入法.doc

热门文章

  1. Error: listen EADDRINUSE: address already in use :::8080
  2. Vue项目设置代理解决开发环境下的跨域问题
  3. 详细分析图像形态学操作
  4. 浏览器中的机器学习:使用预训练模型
  5. .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]...
  6. 给初级拍摄者的十条好建议
  7. Qt程式异常崩溃处理技巧(Win)
  8. nagios系列(七)nagios通过自定义脚本的方式监控mysql主从同步
  9. 多个Activity关闭问题
  10. WPF 类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义。