numpy之高维数组的转置:transpose方法 您所在的位置:网站首页 数组转置的三种方法 numpy之高维数组的转置:transpose方法

numpy之高维数组的转置:transpose方法

2024-02-21 03:49| 来源: 网络整理| 查看: 265

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

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

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

arr = np.arange(16).reshape((2, 2, 4)) arr array([[[ 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]。这句话看起来很有道理,但究竟是怎么变换的呢?通过这句话仍然难以想象,所以我们把这个数组放在三维坐标下来看:

clipboard.png

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

clipboard.png

有了这个图就好理解了,我们通过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]由于横纵坐标相同,所以交换后仍在原位置!

变换后的俯视图如下:

clipboard.png

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

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

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

不足之处,欢迎指正。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有