1. 程式人生 > >Numpy的Reshape和Transpose

Numpy的Reshape和Transpose

      今天餘凱同學用python在從mat檔案裡面讀取圖片資訊時,遇到一個問題,matlab儲存圖片的時候預設的是(長 * 寬 * 圖片個數),他用python讀出來numpy格式就是(長 * 寬 * 圖片個數),所以讓我幫忙轉換成(圖片個數 * 長 * 寬),好久不用python了,就想當然的用了reshape,後來發現自己把圖片的資訊改變了,最後想了一下是reshape和transpose搞混了,所以寫個小結記錄下。

       1.先來說說numpy.reshape吧

         

 你該怎麼來理解numpy.reshap呢?一種比較直觀的理解就是Numpy將不管是什麼形狀的陣列,先扁平化處理成一個一維的列表,然後按照你重新定義的形狀,再把這個列表截斷拼成新的形狀。 在這個過程中,如果你要處理的是圖片矩陣的話,就會完全改變圖片資訊。(我就是錯在這裡)

           還是舉個栗子吧:

data = array(
[[
     [ 0,  1],
     [ 2,  3]
  ],
  [
     [ 4,  5],
     [ 6,  7]
  ],
  [
     [ 8,  9],
     [10, 11]
]])
>> data.reshape(3, 4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

             上面這個栗子就是把一個(3, 2, 2)形狀的陣列,先變成一維陣列,然後在reshape成(3,4)的形狀。

       2.該說numpy.transpose了

         矩陣的轉置在二維陣列上很好理解,比如:

[[1 2],             will become    [[1, 3]
 [3 4]]                             [2, 4]]

        numpy.transpose採取軸作為輸入,所以你可以改變軸,這對於張量來說很有用,也很方便。比如data.transpose(1,0,2),就表示把1位置的數換到0位置,0位置的換到1位置,2沒有變。