溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Numpy中轉(zhuǎn)置transpose、T和swapaxes的實例講解

發(fā)布時間:2020-10-06 03:08:34 來源:腳本之家 閱讀:119 作者:秋刀魚的滋味901 欄目:開發(fā)技術(shù)

利用Python進行數(shù)據(jù)分析時,Numpy是最常用的庫,經(jīng)常用來對數(shù)組、矩陣等進行轉(zhuǎn)置等,有時候用來做數(shù)據(jù)的存儲。

在numpy中,轉(zhuǎn)置transpose和軸對換是很基本的操作,下面分別詳細(xì)講述一下,以免自己忘記。

In [1]: import numpy as np 
 
In [2]: arr=np.arange(16).reshape(2,2,4) 
 
In [3]: arr 
Out[3]: 
array([[[ 0, 1, 2, 3], 
    [ 4, 5, 6, 7]], 
 
    [[ 8, 9, 10, 11], 
    [12, 13, 14, 15]]]) 

如上圖所示,將0-15放在一個2 2 4 的矩陣當(dāng)中,得到結(jié)果如上。

現(xiàn)在要進行裝置transpose操作,比如

In [4]: arr.transpose(1,0,2) 
Out[4]: 
array([[[ 0, 1, 2, 3], 
    [ 8, 9, 10, 11]], 
 
    [[ 4, 5, 6, 7], 
    [12, 13, 14, 15]]]) 

結(jié)果是如何得到的呢?

每一個元素都分析一下,0位置在[0,0,0],轉(zhuǎn)置為[1,0,2],相當(dāng)于把原來位置在[0,1,2]的轉(zhuǎn)置到[1,0,2],對0來說,位置轉(zhuǎn)置后為[0,0,0],同理,對1 [0,0,1]來說,轉(zhuǎn)置后為[0,0,1],同理我們寫出所有如下:

其中第一列是值,第二列是轉(zhuǎn)置前位置,第三列是轉(zhuǎn)置后,看到轉(zhuǎn)置后位置,再看如上的結(jié)果,是不是就豁然開朗了?

0 [0,0,0] [0,0,0]
1 [0,0,1] [0,0,1]
2 [0,0,2] [0,0,2]
3 [0,0,3] [0,0,3]
4 [0,1,0] [1,0,0]
5 [0,1,1] [1,0,1]
6 [0,1,2] [1,0,2]
7 [0,1,3] [1,0,3]
8 [1,0,0] [0,1,0]
9 [1,0,1] [0,1,1]
10 [1,0,2] [0,1,2]
11 [1,0,3] [0,1,3]
12 [1,1,0] [1,1,0]
13 [1,1,1] [1,1,1]
14 [1,1,2] [1,1,2]
15 [1,1,3] [1,1,3]

再看另一個結(jié)果:

In [20]: arr.T
Out[20]:
array([[[ 0, 8],
    [ 4, 12]],
    [[ 1, 9],
    [ 5, 13]],
    [[ 2, 10],
    [ 6, 14]],
    [[ 3, 11],
    [ 7, 15]]])
In [21]: arr.transpose(2,1,0)
Out[21]:
array([[[ 0, 8],
    [ 4, 12]],
    [[ 1, 9],
    [ 5, 13]],
    [[ 2, 10],
    [ 6, 14]],
    [[ 3, 11],
    [ 7, 15]]])

再對比轉(zhuǎn)置前后的圖看一下:

0 [0,0,0] [0,0,0] 
1 [0,0,1] [1,0,0] 
2 [0,0,2] [2,0,0] 
3 [0,0,3] [3,0,0] 
4 [0,1,0] [0,1,0] 
5 [0,1,1] [1,1,0] 
6 [0,1,2] [2,1,0] 
7 [0,1,3] [3,1,0] 
8 [1,0,0] [0,0,1] 
9 [1,0,1] [1,0,1] 
10 [1,0,2] [2,0,1] 
11 [1,0,3] [3,0,1] 
12 [1,1,0] [0,1,1] 
13 [1,1,1] [1,1,1] 
14 [1,1,2] [2,1,1] 
15 [1,1,3] [3,1,1] 

瞬間就明白轉(zhuǎn)置了吧!其實只要動手寫寫,都很容易明白的。另外T其實就是把順序全部顛倒過來,如下:

In [22]: arr3=np.arange(16).reshape(2,2,2,2)
In [23]: arr3
Out[23]:
array([[[[ 0, 1],
     [ 2, 3]],
    [[ 4, 5],
     [ 6, 7]]],
    [[[ 8, 9],
     [10, 11]],
    [[12, 13],
     [14, 15]]]])
In [24]: arr3.T
Out[24]:
array([[[[ 0, 8],
     [ 4, 12]],
    [[ 2, 10],
     [ 6, 14]]],
    [[[ 1, 9],
     [ 5, 13]],
    [[ 3, 11],
     [ 7, 15]]]])
In [25]: arr3.transpose(3,2,1,0)
Out[25]:
array([[[[ 0, 8],
     [ 4, 12]],
    [[ 2, 10],
     [ 6, 14]]],
    [[[ 1, 9],
     [ 5, 13]],
    [[ 3, 11],
     [ 7, 15]]]])

轉(zhuǎn)置就是這樣子,具體上面aar3轉(zhuǎn)置前后的位置,就不寫了。

下面說說swapaxes,軸對稱。

話不多,上結(jié)果

In [27]: arr.swapaxes(1,2) 
Out[27]: 
array([[[ 0, 4], 
    [ 1, 5], 
    [ 2, 6], 
    [ 3, 7]], 
 
    [[ 8, 12], 
    [ 9, 13], 
    [10, 14], 
    [11, 15]]]) 
 
In [28]: arr.transpose(0,2,1) 
Out[28]: 
array([[[ 0, 4], 
    [ 1, 5], 
    [ 2, 6], 
    [ 3, 7]], 
 
    [[ 8, 12], 
    [ 9, 13], 
    [10, 14], 
    [11, 15]]]) 

發(fā)現(xiàn)了吧,其實swapaxes其實就是把矩陣中某兩個軸對換一下,不信再看一個:

In [29]: arr3
Out[29]:
array([[[[ 0, 1],
     [ 2, 3]],
    [[ 4, 5],
     [ 6, 7]]],
    [[[ 8, 9],
     [10, 11]],
    [[12, 13],
     [14, 15]]]])
In [30]: arr3.swapaxes(1,3)
Out[30]:
array([[[[ 0, 4],
     [ 2, 6]],
    [[ 1, 5],
     [ 3, 7]]],
    [[[ 8, 12],
     [10, 14]],
    [[ 9, 13],
     [11, 15]]]])
In [31]: arr3.transpose(0,3,2,1)
Out[31]:
array([[[[ 0, 4],
     [ 2, 6]],
    [[ 1, 5],
     [ 3, 7]]],
    [[[ 8, 12],
     [10, 14]],
    [[ 9, 13],
     [11, 15]]]])

哈哈,只要動手做做,會發(fā)現(xiàn)其實沒有那么困難,不能只看。

紙上得來終覺淺,絕知此事要躬行!共勉!

以上這篇Numpy中轉(zhuǎn)置transpose、T和swapaxes的實例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI