文章目錄
- T屬性
- transpose()方法
- swapaxes()方法
T屬性
import numpy as np # Numpy工具包data = np.arange(12).reshape(3, 4) # 創建一個3行4列的數組
print(data)# 數組的轉置和軸對稱
data1 = data.T
print(data1)
print(data)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print(data1)
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
transpose()方法
二維數組運用 T屬性轉置較為簡單(x->y,y->x),但當操作對象是高維度的數組時,運用transpose()方法可以自由的進行轉置(x->y,y->z,z->x || x->z,y->x,z->y),運用transpose時需要得到一個由軸編號組成的元組,才能對這些軸進行轉置。
# transpose()方法
arr = np.arange(16).reshape((2, 2, 4)) # 每組2個元素組,總共兩組,每個元素組里有4個元素
print(arr)
print(arr.shape)
arr1 = arr.transpose(1, 2, 0) # 變成(2, 4, 2)三維數組,每組4個元素組,總共2組,每個元素組里有2個元素
print(arr1)
注釋名稱只是為了方便自己理解瞎寫的,三維數組還是按x,y,z理解更好理解
三維數組有三個軸,每個軸都對應著一個編號,分別為0、1、2。
由輸出可知,arr.shape是(2,2,4),如果希望對arr進行轉置操作,就需要對它的shape中的順序進行調換。也就是說,當使用transpose()方法對數組的shape進行變換時,需要以元組的形式傳入shape的編號,比如本例中的(1,2,0)。
ps:若傳入(0,1,2),則數組的shape不會發生任何變化
print(arr)
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
為了便于理解貼張圖好了
print(arr.shape)
(2,2,4)
print(arr1)
[[[ 0 8]
[ 1 9]
[ 2 10]
[ 3 11]]
[[ 4 12]
[ 5 13]
[ 6 14]
[ 7 15]]]
本例中,由(0,1,2)變為(1,2,0)其實也就是我們說的(x->y,y->z,z->x),什么意思呢?
簡單來講,如果拿第一個元素0來看,不方便解釋——以前x0,y0,z0的值等于0,現在x0,y0,z0的值等于0那我們看第二個元素的話,shape為(0,1,2)時,x0,y0,z1的值為1,當shape為(1,2,0)時,x0,y0,z1的值由于(x->y,y->z,z->x)
【->前是(0,1,2)中的坐標,->后是(1,2,0)中的坐標】這樣的變換,也就是(1,2,0)的x0是(0,1,2)的y0,(1,2,0)的y0是(0,1,2)的z0,(1,2,0)的z1是(0,1,2)的x1,即——8。以此類推。
如果我們不輸入任何參數,直接調用transpose()方法,則其執行的效果等價于transpose(2,1,0)將數組進行轉置。
swapaxes()方法
在某些情況下,我們可能只需要轉換其中的兩個軸,這時我們可以使用此方法,該方法需要接收一對軸編號。
# swapaxes()方法
arr2 = arr.swapaxes(1, 0) # 等價于transpose(1, 0, 2)
print(arr2)
print(arr2)
[[[ 0 1 2 3]
[ 8 9 10 11]]
[[ 4 5 6 7]
[12 13 14 15]]]