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]]])