numpy之高維數組的轉置:transpose方法——經過幾何體來迅速理解

首先說明,這個方法是博主在理解高維數組轉置的transpose 方法時所提出的,所以嚴謹性和正確性有待考察,但私覺得徹底能夠這樣理解,所以作個記錄,若是對你有幫助的話歡迎點贊收藏,若是認爲有錯誤的話請提出批評,督促改進。數組


transpose方法是數組用來轉置的一種方法,尤爲對於高維數組,transpose須要獲得一個由軸編號組成的元組才能對這些軸進行轉置。那麼是怎麼根據這個軸來完成轉置的呢?spa

咱們來看下面這個三維數組:code

arr = np.arange(16).reshape((2, 2, 4))
arr

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

arr進行轉置:ip

arr.transpose((1, 0, 2))

array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

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

以上面這個 2 組 2 行 4 列的三維數組爲例,試圖經過在笛卡爾座標系下想象立方體的變換來理解,所以有下面的想法。首先要知道transpose的參數表示 shape 的形狀,對於這個例子來講,即2[0]2[1]4[2],用transpose(1,0,2)轉置後變爲2[1]2[0]4[2]。這句話看起來頗有道理,但到底是怎麼變換的呢?經過這句話仍然不可思議,因此咱們把這個數組放在三維座標下來看:it

clipboard.png

在這裏我假設這個三維數組在空間中按上圖的方式排列,數組裏每一個數字存放在一個小立方體中,更具體一點,咱們的俯視圖以下:class

clipboard.png

有了這個圖就好理解了,咱們經過transpose的方法,將數組的排列方式由2[0]2[1]4[2]變爲了2[1]2[0]4[2],在座標系中就是z[0]x[1]y[2]變爲了z[1]x[0]y[2],也就是說交換了x軸和z軸!cli

整個過程當中y軸沒有參與,因此它們的縱座標不會改變,爲了簡便表示,咱們只考慮x軸和z軸。在這裏我以小立方體的個數來做爲座標,即把它視爲一個點來計算座標。若是將 4 這個點的座標在xOz(O爲座標原點)平面內視爲(2,1),那麼通過transpose後,它的座標應變爲(1,2),同理,和 4 同一行的數字也通過一樣的變換。而數字 12 的座標可視爲(2,2),變換後仍爲(2,2)方法

再回到上圖中看,這時咱們應該就很容易明白transpose這個方法對數組進行了怎樣的變換:數組[4,5,6,7]和數組[8,9,10,11]xOz平面內橫縱座標互換,所以兩個數組進行了位置交換。而數組[0,1,2,3]和數組[12,13,14,15]因爲橫縱座標相同,因此交換後仍在原位置!im

變換後的俯視圖以下:img

clipboard.png

最後,將以立方體形式表示的數組以輸入時候的順序輸出,就獲得轉換後的數組:

array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

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

以上就是博主關於transpose這個方法的理解,至於更高維的變換,能夠用相似的方式來思考,考慮爲一個座標變換問題,也許就能夠更具體的理解到如何變換。


不足之處,歡迎指正。

相關文章
相關標籤/搜索