首先說明,這個方法是博主在理解高維數組轉置的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
在這裏我假設這個三維數組在空間中按上圖的方式排列,數組裏每一個數字存放在一個小立方體中,更具體一點,咱們的俯視圖以下:class
有了這個圖就好理解了,咱們經過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
最後,將以立方體形式表示的數組以輸入時候的順序輸出,就獲得轉換後的數組:
array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]])
以上就是博主關於transpose
這個方法的理解,至於更高維的變換,能夠用相似的方式來思考,考慮爲一個座標變換問題,也許就能夠更具體的理解到如何變換。
不足之處,歡迎指正。