transpose用於numpy中高維度數組的軸變換,非常不好理解,我用自己的理解以三維數組來舉例:
transpose()括號中傳入的參數通常爲0,1,2,可以將0看作0軸,1看作1軸,2看作2軸;對於三維數組(a,b,c)來說,可以把它看作是a個b行c列的數組。拿
arr = np.arange(0,16).reshape(2,2,4)
這個數組來舉例
這個數組的維度是(2,2,4),可以把它看作兩個兩行四列的矩陣,第一個是
第二個是
把這個矩陣分解寫成下邊這種格式:
豎着看
arr[0][0][0] = 0 arr[1][0][0] = 8
arr[0][0][1] = 1 arr[1][0][1] = 9
arr[0][0][2] = 2 arr[1][0][2] = 10
arr[0][0][3] = 3 arr[1][0][3] = 11
arr[0][1][0] = 4 arr[1][1][0] = 12
arr[0][1][1] = 5 arr[1][1][1] = 13
arr[0][1][2] = 6 arr[1][1][2] = 14
arr[0][1][3] = 7 arr[1][1][3] = 15
第一個[]是數組的0維,第二個[]是數組的1維,第三個[]是數組的2維
再回到transpose上,transpose的括號中的參數代表的就是數組的維度.
transpose(0,1,2)表示三個維度不發生交換,還是原來的數組;
transpose(1,0,2)表示第0維度和第1維度發生交換,也就是將arr[][][]數組中第0個[]和第1個[]中的數字發生交換,原數組的形狀是(2,2,4),交換以後仍然是(2,2,4),形狀不變但是內容卻變了。例如將arr[0][1][0] = 4換成arr[1][0][0]=4,將arr[1][0][0]=8換成arr[0][1][0]=8,以此類推
豎着看
arr[0][0][0] = 0 arr[1][0][0] = 4
arr[0][0][1] = 1 arr[1][0][1] = 5
arr[0][0][2] = 2 arr[1][0][2] = 6
arr[0][0][3] = 3 arr[1][0][3] = 7
arr[0][1][0] = 8 arr[1][1][0] = 12
arr[0][1][1] = 9 arr[1][1][1] = 13
arr[0][1][2] = 10 arr[1][1][2] = 14
arr[0][1][3] = 11 arr[1][1][3] = 15
轉換成數組格式就是
transpose(0,2,1)就是將第1維度和第2維度交換,也就是將arr[][][]中第1個[]和第二個[]交換,數組維度由原來的(2,2,4)變成(2,4,2);arr[0][1][2]=10換成arr[0][2][1]=10,注意原來的數組沒有arr[0][2][1],所以要生成新的,將arr[0][1][2]去掉,數組的維度也因此發生了變化。
豎着看
arr[0][0][0] = 0 arr[1][0][0] = 8
arr[0][0][1] = 4 arr[1][0][1] = 12
arr[0][1][0] = 1 arr[1][1][0] = 9
arr[0][1][1] = 5 arr[1][1][1] = 13
arr[0][2][0] = 2 arr[1][2][0] = 10
arr[0][2][1] = 6 arr[1][2][1] = 14
arr[0][3][0] = 3 arr[1][3][0] = 11
arr[0][3][1] = 7 arr[1][3][1] = 15
轉換成數組格式爲