詳解高維數組轉置-numpy中轉置的用法和原理詳解

numpy數組轉置

很多時候我們需要對數組進行轉置以方便運算處理,在numpy中有3種方法可以對數組進行轉置,分別是T、transpose、swapaxes。

數組轉置原理

首先上例子:

>>> import numpy as np
>>> data = np.arange(24).reshape(2,3,4)
>>> print(data)
# 轉置前初始數據,可以視爲2*3*4的一個矩陣
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

#  將維度0和維度1調換,變爲3*2*4的矩陣
>>> data.transpose(1,0,2);
array([[[ 0,  1,  2,  3],
        [12, 13, 14, 15]],

       [[ 4,  5,  6,  7],
        [16, 17, 18, 19]],

       [[ 8,  9, 10, 11],
        [20, 21, 22, 23]]])

對於高維數組的轉置,其實可以通過index索引來理解,以上面的數據爲例說明爲什麼數據會發生這樣的變化。
轉置前數組的維度信息是234,此時維度0有2個數據,維度1有3個數據,維度2有4個數據。
轉置後,維度0和維度1調換,調換後維度0有3個數據,維度1有2個數據,維度2有4個數據,轉置後數組的維度信息應爲324
舉幾個例子(0,5,10,15,18,21)說明數字位置發生的變化:
數字0:轉置前的索引是(0,0,0),轉置後調換維度,索引爲(0,0,0)
數字5:轉置前的索引是(0,1,1),轉置後調換維度,索引爲(1,0,1)
數字10:轉置前的索引是(0,2,2),轉置後調換維度,索引爲(2,0,2)
數字15:轉置前的索引是(1,0,3),轉置後調換維度,索引爲(0,1,3)
數字18:轉置前的索引是(1,1,2),轉置後調換維度,索引爲(1,1,2)
數字21:轉置前的索引是(1,2,1),轉置後調換維度,索引爲(2,1,1)
可以看到上面的數據正是符合這樣的變化的。

轉置函數介紹

T

對數組進行完全的轉置,例如原來是從維度0 ~ 2,轉置後是從維度2 ~ 0,原來矩陣是2 * 3 * 4,轉置後爲4 * 3 * 2.如下所示:

>>> data.T
array([[[ 0, 12],
        [ 4, 16],
        [ 8, 20]],

       [[ 1, 13],
        [ 5, 17],
        [ 9, 21]],

       [[ 2, 14],
        [ 6, 18],
        [10, 22]],

       [[ 3, 15],
        [ 7, 19],
        [11, 23]]])

transpose

指定變換後的維度,例如從維度(0,1,2)到維度(1,0,2),數組從2 * 3 * 4到3 * 2 * 4,如下所示:

>>> data.transpose(1,0,2);
array([[[ 0,  1,  2,  3],
        [12, 13, 14, 15]],

       [[ 4,  5,  6,  7],
        [16, 17, 18, 19]],

       [[ 8,  9, 10, 11],
        [20, 21, 22, 23]]])

swapaxes

將指定的兩個維度進行調換,例如上面的例子就可以理解爲是對維度0和維度1進行了兌換,可以用如下代碼實現

>>> data.swapaxes(0,1)
array([[[ 0,  1,  2,  3],
        [12, 13, 14, 15]],

       [[ 4,  5,  6,  7],
        [16, 17, 18, 19]],

       [[ 8,  9, 10, 11],
        [20, 21, 22, 23]]])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章