您好,登錄后才能下訂單哦!
利用Python進行數據分析時,Numpy是最常用的庫,經常用來對數組、矩陣等進行轉置等,有時候用來做數據的存儲。
在numpy中,轉置transpose和軸對換是很基本的操作,下面分別詳細講述一下,以免自己忘記。
In [1]: import numpy as np In [2]: arr=np.arange(16).reshape(2,2,4) In [3]: arr Out[3]: array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]]])
如上圖所示,將0-15放在一個2 2 4 的矩陣當中,得到結果如上。
現在要進行裝置transpose操作,比如
In [4]: arr.transpose(1,0,2) Out[4]: array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]])
結果是如何得到的呢?
每一個元素都分析一下,0位置在[0,0,0],轉置為[1,0,2],相當于把原來位置在[0,1,2]的轉置到[1,0,2],對0來說,位置轉置后為[0,0,0],同理,對1 [0,0,1]來說,轉置后為[0,0,1],同理我們寫出所有如下:
其中第一列是值,第二列是轉置前位置,第三列是轉置后,看到轉置后位置,再看如上的結果,是不是就豁然開朗了?
0 [0,0,0] [0,0,0] 1 [0,0,1] [0,0,1] 2 [0,0,2] [0,0,2] 3 [0,0,3] [0,0,3] 4 [0,1,0] [1,0,0] 5 [0,1,1] [1,0,1] 6 [0,1,2] [1,0,2] 7 [0,1,3] [1,0,3] 8 [1,0,0] [0,1,0] 9 [1,0,1] [0,1,1] 10 [1,0,2] [0,1,2] 11 [1,0,3] [0,1,3] 12 [1,1,0] [1,1,0] 13 [1,1,1] [1,1,1] 14 [1,1,2] [1,1,2] 15 [1,1,3] [1,1,3]
再看另一個結果:
In [20]: arr.T Out[20]: array([[[ 0, 8], [ 4, 12]], [[ 1, 9], [ 5, 13]], [[ 2, 10], [ 6, 14]], [[ 3, 11], [ 7, 15]]]) In [21]: arr.transpose(2,1,0) Out[21]: array([[[ 0, 8], [ 4, 12]], [[ 1, 9], [ 5, 13]], [[ 2, 10], [ 6, 14]], [[ 3, 11], [ 7, 15]]])
再對比轉置前后的圖看一下:
0 [0,0,0] [0,0,0] 1 [0,0,1] [1,0,0] 2 [0,0,2] [2,0,0] 3 [0,0,3] [3,0,0] 4 [0,1,0] [0,1,0] 5 [0,1,1] [1,1,0] 6 [0,1,2] [2,1,0] 7 [0,1,3] [3,1,0] 8 [1,0,0] [0,0,1] 9 [1,0,1] [1,0,1] 10 [1,0,2] [2,0,1] 11 [1,0,3] [3,0,1] 12 [1,1,0] [0,1,1] 13 [1,1,1] [1,1,1] 14 [1,1,2] [2,1,1] 15 [1,1,3] [3,1,1]
瞬間就明白轉置了吧!其實只要動手寫寫,都很容易明白的。另外T其實就是把順序全部顛倒過來,如下:
In [22]: arr3=np.arange(16).reshape(2,2,2,2) In [23]: arr3 Out[23]: array([[[[ 0, 1], [ 2, 3]], [[ 4, 5], [ 6, 7]]], [[[ 8, 9], [10, 11]], [[12, 13], [14, 15]]]]) In [24]: arr3.T Out[24]: array([[[[ 0, 8], [ 4, 12]], [[ 2, 10], [ 6, 14]]], [[[ 1, 9], [ 5, 13]], [[ 3, 11], [ 7, 15]]]]) In [25]: arr3.transpose(3,2,1,0) Out[25]: array([[[[ 0, 8], [ 4, 12]], [[ 2, 10], [ 6, 14]]], [[[ 1, 9], [ 5, 13]], [[ 3, 11], [ 7, 15]]]])
轉置就是這樣子,具體上面aar3轉置前后的位置,就不寫了。
下面說說swapaxes,軸對稱。
話不多,上結果
In [27]: arr.swapaxes(1,2) Out[27]: array([[[ 0, 4], [ 1, 5], [ 2, 6], [ 3, 7]], [[ 8, 12], [ 9, 13], [10, 14], [11, 15]]]) In [28]: arr.transpose(0,2,1) Out[28]: array([[[ 0, 4], [ 1, 5], [ 2, 6], [ 3, 7]], [[ 8, 12], [ 9, 13], [10, 14], [11, 15]]])
發現了吧,其實swapaxes其實就是把矩陣中某兩個軸對換一下,不信再看一個:
In [29]: arr3 Out[29]: array([[[[ 0, 1], [ 2, 3]], [[ 4, 5], [ 6, 7]]], [[[ 8, 9], [10, 11]], [[12, 13], [14, 15]]]]) In [30]: arr3.swapaxes(1,3) Out[30]: array([[[[ 0, 4], [ 2, 6]], [[ 1, 5], [ 3, 7]]], [[[ 8, 12], [10, 14]], [[ 9, 13], [11, 15]]]]) In [31]: arr3.transpose(0,3,2,1) Out[31]: array([[[[ 0, 4], [ 2, 6]], [[ 1, 5], [ 3, 7]]], [[[ 8, 12], [10, 14]], [[ 9, 13], [11, 15]]]])
哈哈,只要動手做做,會發現其實沒有那么困難,不能只看。
紙上得來終覺淺,絕知此事要躬行!共勉!
以上這篇Numpy中轉置transpose、T和swapaxes的實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。