日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

numpy之高维数组的转置:transpose方法——通过几何体来迅速理解

發布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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方法——通过几何体来迅速理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。