1. 程式人生 > >python numpy: transpose方法、T屬性以及swapaxes方法。

python numpy: transpose方法、T屬性以及swapaxes方法。

轉置可以對陣列進行重置,返回的是源資料的檢視(不會進行任何複製操作)。
轉置有三種方式,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需要用到一個由軸編號組成的元組,才能進行轉置。

這裡,著實好好理解了一下。開始的時候怎麼都想不明白。因為他跟矩陣轉置理解起來不太一樣。

組來說,確定最底層的一個基本元素位置需要用到的索引個數即是維度。這句話的理解可以結合我索引和切片的那篇文章理解。

我是這樣的理解的,比如說三維的陣列,那就對維度進行編號,也就是0,1,2。這樣說可能比較抽象。這裡的0,1,2可以理解為對shape返回元組的索引。

比如:

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

In [60]: arr1

Out[60]:

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

In [61]: arr1.shape #看形狀

Out[61]: (2, 2, 3) #說明這是一個223的陣列(矩陣),返回的是一個元組,可以對元組進行索引,也就是0,1,2

形狀 索引
2 1
2 2
3 3

所以說,transpose引數的真正意義在於這個shape元組的索引。

那麼它的轉置就應該是

In [62]: arr1.transpose((1,0,2))

Out[62]:

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

比如,數值6開始的索引是[1,0,0],變換後變成了[0,1,0]。

這也說明了,transpose依賴於shape。shape[0],shape[1],shape[2]原來分別表示矩陣3個維度的索引。
tranpose之後根據transpoe的位置引數,索引的對應關係也發生變化,transpose(1,0,2)就表示原來的shape[0]和shape[1]對調,shape[2]不變。比如你舉的例子裡面原來6的索引為(1,0,0),transpose之後1和0對調,變成了(0,1,0),其他元素的位置也類似改變。

3.swapaxes

雖然還有點不解的地方,但是,理解了上方那部分之後,swapaxes方法也就很好理解了。它接受一對軸編號。進行軸對換。其實也就是shape引數。

In [67]: arr2 = np.arange(16).reshape(2,2,4)

In [68]: arr2

Out[68]:

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

In [69]: arr2.shape

Out[69]: (2, 2, 4)

In [70]: arr2.swapaxes(1,2)

Out[70]:

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

In [4]: arr2.swapaxes(1,0)#轉置,對比transpose(1,0,2)

Out[4]:

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

reference:https://www.cnblogs.com/sunshinewang/p/6893503.html