利用Python進(jìn)行數(shù)據(jù)分析時(shí),Numpy是最常用的庫(kù),經(jīng)常用來對(duì)數(shù)組、矩陣等進(jìn)行轉(zhuǎn)置等,有時(shí)候用來做數(shù)據(jù)的存儲(chǔ)。
在numpy中,轉(zhuǎn)置transpose和軸對(duì)換是很基本的操作,下面分別詳細(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放在一個(gè)2 2 4 的矩陣當(dāng)中,得到結(jié)果如上。
現(xiàn)在要進(jì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é)果是如何得到的呢?
每一個(gè)元素都分析一下,0位置在[0,0,0],轉(zhuǎn)置為[1,0,2],相當(dāng)于把原來位置在[0,1,2]的轉(zhuǎn)置到[1,0,2],對(duì)0來說,位置轉(zhuǎn)置后為[0,0,0],同理,對(duì)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]
再看另一個(gè)結(jié)果:
In [20]: arr.TOut[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]]])
再對(duì)比轉(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)置了吧!其實(shí)只要?jiǎng)邮謱憣懀己苋菀酌靼椎摹A硗釺其實(shí)就是把順序全部顛倒過來,如下:
In [22]: arr3=np.arange(16).reshape(2,2,2,2)In [23]: arr3Out[23]:array([[[[ 0, 1], [ 2, 3]], [[ 4, 5], [ 6, 7]]], [[[ 8, 9], [10, 11]], [[12, 13], [14, 15]]]])In [24]: arr3.TOut[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]]]])
新聞熱點(diǎn)
疑難解答
圖片精選