numpy之高维数组的转置:transpose方法——通过几何体来迅速理解
首先說明,這個方法是博主在理解高維數組轉置的transpose 方法時所提出的,因此嚴謹性和正確性有待考察,但私以為完全可以這樣理解,因此做個記錄,如果對你有幫助的話歡迎點贊收藏,如果認為有錯誤的話請提出批評,督促改進。
transpose方法是數組用來轉置的一種方法,尤其對于高維數組,transpose需要得到一個由軸編號組成的元組才能對這些軸進行轉置。那么是怎么根據這個軸來完成轉置的呢?
我們來看下面這個三維數組:
arr = np.arange(16).reshape((2, 2, 4)) arrarray([[[ 0, 1, 2, 3],[ 4, 5, 6, 7]],[[ 8, 9, 10, 11],[12, 13, 14, 15]]])對arr進行轉置:
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]。這句話看起來很有道理,但究竟是怎么變換的呢?通過這句話仍然難以想象,所以我們把這個數組放在三維坐標下來看:
在這里我假設這個三維數組在空間中按上圖的方式排列,數組里每個數字存放在一個小立方體中,更具體一點,我們的俯視圖如下:
有了這個圖就好理解了,我們通過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軸!
整個過程中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]由于橫縱坐標相同,所以交換后仍在原位置!
變換后的俯視圖如下:
最后,將以立方體形式表示的數組以輸入時候的順序輸出,就得到轉換后的數組:
array([[[ 0, 1, 2, 3],[ 8, 9, 10, 11]],[[ 4, 5, 6, 7],[12, 13, 14, 15]]])以上就是博主關于transpose這個方法的理解,至于更高維的變換,可以用類似的方式來思考,考慮為一個坐標變換問題,也許就可以更具體的理解到如何變換。
不足之處,歡迎指正。
總結
以上是生活随笔為你收集整理的numpy之高维数组的转置:transpose方法——通过几何体来迅速理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20172317 2018-2019-1
- 下一篇: 【Go】Panic函数