關於python中的transpose


原文地址:https://www.cnblogs.com/chenyansu/p/6774963.html,

看書中看到一行代碼:

mymatrix5 = mat([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])

mymatrix5.transpose()

在Numpy對矩陣的轉置中,我們可以用transpose()函數來處理。

    這個函數的運行是非常反常理的,可能會令人陷入思維誤區。

 

    假設有這樣那個一個三維數組(2*4*2):

 

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

 

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

 

(1). 錯誤的觀點

    我們通常的想法是

    從x軸看去,0, 1 ,2 ,3

    從y軸看去,0,4

    從z軸看去,0, 8

 

    這樣表達或許更清晰

       y                                        y

x:    0,    1,     2,     3     ----z---- 8,     9,     10,     11

       4,    5,     6,     7     ----z----12,    13,    14,    15

    下標的排列為[x, y, z]

 

(2). 正確的觀點

    事實上,上述廟是是錯誤的,我們可以通過下標來測試:

arr[0, 0, 0]
0

arr[1, 0, 0]
8

arr[0, 1, 0]
4

arr[0, 0, 1]
1

    可以看出,通過改變第一個下標, 我們實際的變動為(1)中表示的z,而不是x,arr[1, 0, 0]所得的數是8而不是1;通過改變第三個下標, 我們實際的變動為(1)中表示的x,而不是z,arr[0, 0, 1]所得的數是1而不是8.

    所以,一個數的下標為[z, y, x]

 

(3)transpose函數的使用

    首先,我們利用transpose原樣輸出

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

-----------結果的分割線----------
array([[[ 0, 1, 2, 3],
            [ 4, 5, 6, 7]],

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

    在這里,transpose()函數的(0, 1, 2)對應着(z, y, x)軸

    當我們輸入arr.transpose((0, 2, 1))時,產生下列結果
array([[[ 0, 4],
            [ 1, 5],
            [ 2, 6],
            [ 3, 7]],  

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

    我們可以看到,當我們改變了1和2的位置,x和y轉置了。

 

(4)總結:重點在於理解,三維數組的下標為[z, y, x], transpose()對其的默認編號為0=z, y=1, x=2.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM