美文网首页
Numpy笔记(Transposing Arrays)

Numpy笔记(Transposing Arrays)

作者: 生信start_site | 来源:发表于2020-06-14 03:01 被阅读0次

    Transposing Arrays and Swapping Axes

    这一部分笔记虽然少,但是我在学习这部分的时候感觉有点难理解,于是单独提出来作为一个独立的笔记来记录。

    转置数组(交换坐标轴):

    (一)对于二维数组来说:

    In [80]: arr=np.arange(15).reshape((3,5))
    
    In [81]: arr
    Out[81]:
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])
    
    In [82]: arr.T
    Out[82]:
    array([[ 0,  5, 10],
           [ 1,  6, 11],
           [ 2,  7, 12],
           [ 3,  8, 13],
           [ 4,  9, 14]])
    

    这个比较好理解:

    二维数组,先读X轴的元素,转置后,先按照Y轴的顺序读取元素

    这个转置有点像我们把表达矩阵进行转置是一样的道理,x轴变y轴,y轴变x轴。理解起来也很容易。

    (二)对于多维数组来说:
    情况就比较的复杂:

    #首先生成一个三维数组:
    In [83]: arr = np.arange(16).reshape((2, 2, 4)) #这里的2,2,4你可以把这三个数分别分配为0轴,1轴,和2轴
    
    In [84]: arr #这是原始数组的排列方式
    Out[84]:
    array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7]],
    
           [[ 8,  9, 10, 11],
            [12, 13, 14, 15]]])
    
    In [86]: arr.transpose((1,0,2)) #这是转置之后的排列方式,这个转置是将0轴和1轴的位置交换后的结果
    Out[86]:
    array([[[ 0,  1,  2,  3],
            [ 8,  9, 10, 11]],
    
           [[ 4,  5,  6,  7],
            [12, 13, 14, 15]]])
    

    这里有些难以理解,我在网上查看了一些文章对 arr.transpose功能的解析,很多人是画了一个三维坐标轴来进行理解的,比如说这篇文章:Python numpy.transpose 详解。无奈我当年立体几何学的太差,空间想象能力不好,于是自己琢磨了另一种理解的方式,比较笨拙,但是不用太费脑细胞:

    在这个图里,我把0-15这16个数字的索引位置都标记了出来。每一个索引都对应了0轴,1轴和2轴。那么原始数组的读取顺序是0,1,2。而上面代码转置的方式使得读取顺序变成了1,0,2。也就是说0轴和1轴的位置互换了。在这个表里对应的意思是,所有数字的索引位置的0轴和1轴要互换。那么这样一来:0-3数字不变,因为换完以后还是0;12-15数字也不变,因为换完后还是1。变的就是剩下的8个数字的位置。

    那么同样的道理,下面这个转置的方法就不难理解了,0轴不动,把1轴和2轴的位置互换一下:

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

    这里可以看到,数组的结构发生了改变,是因为每一个数对应的索引变化很大,同样,我列出了所有数字的索引变化前后的情况:

    上面的表格可以看出,之前原数组的1轴只有0和1的索引位置,但是在变化后,1轴的索引数有0,1,2,3四种情况,所以这时我们的数组结构不再是以前的结构了:

    其实这里1轴和2轴交换也可以用arr.swapaxes功能实现:

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

    相关文章

      网友评论

          本文标题:Numpy笔记(Transposing Arrays)

          本文链接:https://www.haomeiwen.com/subject/hmsatktx.html