Numpy中轉(zhuǎn)置transpose、T和swapaxes的實(shí)例講解
利用Python進(jìn)行數(shù)據(jù)分析時(shí),Numpy是最常用的庫,經(jīng)常用來對數(shù)組、矩陣等進(jìn)行轉(zhuǎn)置等,有時(shí)候用來做數(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)在要進(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é)果是如何得到的呢?
每一個元素都分析一下,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)置了吧!其實(shí)只要動手寫寫,都很容易明白的。另外T其實(shí)就是把順序全部顛倒過來,如下:
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)了吧,其實(shí)swapaxes其實(shí)就是把矩陣中某兩個軸對換一下,不信再看一個:
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)其實(shí)沒有那么困難,不能只看。
紙上得來終覺淺,絕知此事要躬行!共勉!
以上這篇Numpy中轉(zhuǎn)置transpose、T和swapaxes的實(shí)例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- ndarray的轉(zhuǎn)置(numpy.transpose()與A.T命令對比分析)
- Python?numpy.transpose使用詳解
- numpy.transpose()實(shí)現(xiàn)數(shù)組的轉(zhuǎn)置例子
- 對numpy下的軸交換transpose和swapaxes的示例解讀
- 詳解Numpy數(shù)組轉(zhuǎn)置的三種方法T、transpose、swapaxes
- 對numpy中的transpose和swapaxes函數(shù)詳解
- numpy.transpose對三維數(shù)組的轉(zhuǎn)置方法
- numpy中的transpose函數(shù)中具體使用方法
相關(guān)文章
基于Python執(zhí)行dos命令并獲取輸出的結(jié)果
這篇文章主要介紹了基于Python執(zhí)行dos命令并獲取輸出的結(jié)果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12PyQt5基本控件使用之消息彈出、用戶輸入、文件對話框的使用方法
本文主要介紹PyQt界面實(shí)現(xiàn)中常用的消息彈出對話框、提供用戶輸入的輸入框、打開文件獲取文件/目錄路徑的文件對話框。 本文主要針對這三種控件的主要場景進(jìn)行介紹。感興趣的朋友跟隨小編一起看看吧2019-08-08python 中的9個實(shí)用技巧,助你提高開發(fā)效率
這篇文章主要介紹了python 中的9個實(shí)用技巧,幫助大家提高python開發(fā)時(shí)的效率,感興趣的朋友可以了解下2020-08-08Python3顯示當(dāng)前時(shí)間、計(jì)算時(shí)間差及時(shí)間加減法示例代碼
這篇文章主要給大家介紹了關(guān)于Python3顯示當(dāng)前時(shí)間、計(jì)算時(shí)間差及時(shí)間加減法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09