Numpy数组之转置和轴对换

转置和轴对换

转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作)。

转置有三种方式,transpose方法、T属性以及swapaxes方法。

1 .T(适用于一、二维数组)

In [1]: import numpy as np
In [2]: arr = np.arange(20).reshape(4,5)#生成一个4行5列的数组
In [3]: arr
Out[3]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
In [4]: arr.T #求转置
Out[4]:
array([[ 0,  5, 10, 15],
       [ 1,  6, 11, 16],
       [ 2,  7, 12, 17],
       [ 3,  8, 13, 18],
       [ 4,  9, 14, 19]])

2.transpose(适用于高维数组)

对于高维数组,transpose需要用到一个由轴编号组成的元组,才能进行转置。

他跟矩阵转置理解起来不太一样。

对多维数组来说,确定最底层的一个基本元素位置需要用到的索引个数即是维度

例如一个三维的数组,那就对维度进行编号,也就是0,1,2。这样说可能比较抽象。这里的0,1,2可以理解为对shape返回元组的索引。
比如:

In [1]: arr1 = np.arange(12).reshape(2,2,3)

In [1]: arr1
Out[1]:
array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [2]: arr1.shape #看形状
Out[2]: (2, 2, 3)
 #说明这是一个2*2*3的数组(矩阵),返回的是一个元组,可以对元组进行索引,也就是0,1,2
形状 索引
2 0
2 1
3 2

所以说,transpose参数的真正意义在于这个shape元组的索引。

那么它的转置就应该是


In [3]: arr1.transpose((1,0,2))
Out[3]:
array([[[ 0,  1,  2],
        [ 6,  7,  8]],

       [[ 3,  4,  5],
        [ 9, 10, 11]]])

比如,数值6开始的索引是[1,0,0],变换后变成了[0,1,0]
这也说明了,transpose依赖于shape

3.swapaxes

理解了上方那部分之后,swapaxes方法也就很好理解了。它接受一对轴编号。进行轴对换。其实也就是shape参数。

In [4]: arr2 = np.arange(16).reshape(2,2,4)           
In [4]: arr2    
Out[4]:                                               
array([[[ 0,  1,  2,  3],                              
        [ 4,  5,  6,  7]],                             

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

       [[ 8, 12],                                      
        [ 9, 13],                                      
        [10, 14],                                      
        [11, 15]]])   
In [7]: arr2.swapaxes(1,0)#转置,对比transpose(1,0,2)
Out[7]:
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])                                 

你可能感兴趣的:(Numpy数组之转置和轴对换)