zoukankan      html  css  js  c++  java
  • Numpy三维数组的转置与交换轴

    二维数组的转置应该都知道,就是行列交换

    而在numpy中也可以对三维数组进行转置,np.T 默认进行的操作是将0轴与2轴交换

    本文主要对三位数组轴交换的理解上发表本人的看法。


    a = np.array(range(24))
    
    Out[101]: 
    array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
    17, 18, 19, 20, 21, 22, 23])
    
    b = a.reshape(2,3,4)
    b
    Out[103]: 
    array([[[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]],
    
    [[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]]])

    在三位数组中我们称三个轴分别为行,列,面

    在数组b中,

    [[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]],是一行
    [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]是一行
    展开写[[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]]看的更清楚。这是行的概念
    [ 0, 1, 2, 3],是一列
    [ 4, 5, 6, 7],是一列
    [ 8, 9, 10, 11]是一列
    而其中[0,4,8] [1,5,9] [2,6,10] [3,7,11]分别是一个面
    回过头来可以发现,b是由2行3列4面组成的三维数组 (行代表0轴,列1轴,面2轴)

    接下来记住一句话,交换哪两个轴,要保持另一个轴不改变,示例如下
    取c为b的列和面交换后的数组
    c = b.swapaxes(1,2)
    
    c
    Out[105]: 
    array([[[ 0,  4,  8],
            [ 1,  5,  9],
            [ 2,  6, 10],
            [ 3,  7, 11]],
    
           [[12, 16, 20],
            [13, 17, 21],
            [14, 18, 22],
            [15, 19, 23]]])

    回想那句话,交换哪两个轴,另一个轴不变,可以发现c还是两行,而且交换只是在每一行中发生变化

    原来的列变成了面,原来的面变成了列

    看第二种,d表示b的0轴和2轴的交换

    d = b.swapaxes(0,2)
    
    d
    Out[108]: 
    array([[[ 0, 12],
            [ 4, 16],
            [ 8, 20]],
    
           [[ 1, 13],
            [ 5, 17],
            [ 9, 21]],
    
           [[ 2, 14],
            [ 6, 18],
            [10, 22]],
    
           [[ 3, 15],
            [ 7, 19],
            [11, 23]]])
    看上去有点蒙逼了,但还是想一下那句话,交换了0轴和2轴,那么1轴是不变的。
    我们把原来的b看成是以行和面为元素的二维数组
    即b是两行,四面。每个面用第一个元素代替 即[0,4,8] 用[0]来代替
    即b可以写成[[0],[1],[2],[3]
          [12],[13],[14],[15]]
    然后进行交换轴 其实也就变成了二维数组的转置
    变换后为[0],[12]
        [1],[13]
        [2],[14]
        [3],[15]
    最后我们再把每个面展开,就得到结果了。到现在你有没有法线,面中的元素个数与列的大小是一样的。
    好了,接下来你可以试试将0轴与1轴交换。一步一步来,欢迎评论区讨论。
          



  • 相关阅读:
    未格式化的输入/输出操作
    格式化输入与输出
    随机数
    正则表达式
    bitset
    tuple
    servlet笔记
    springside
    maven
    Lua简易入门教程
  • 原文地址:https://www.cnblogs.com/wildbloom/p/7928237.html
Copyright © 2011-2022 走看看