第5章 NumPy模塊的基礎與應用_第1頁
第5章 NumPy模塊的基礎與應用_第2頁
第5章 NumPy模塊的基礎與應用_第3頁
第5章 NumPy模塊的基礎與應用_第4頁
第5章 NumPy模塊的基礎與應用_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第5章NumPy基礎與應用主講人:***13-10月-23Python數(shù)據(jù)分析與數(shù)據(jù)挖掘目錄contents數(shù)組基礎0102數(shù)組的相關(guān)操作03數(shù)組讀寫數(shù)組基礎015.1Numpy簡介NumPy是Python的一個基礎科學計算包,是許多高級的第三方科學計算的模塊,如:Matplotlib、Pandas等,都是基于NumPy所構(gòu)建的。它包含以下幾個特點:強大的多維數(shù)組對象;精細而復雜的功能;用于集成C/C++和Fortran代碼的工具;實用的線性代數(shù),傅里葉變換和隨機數(shù)功能。對于許多用戶,尤其是Windows用戶,學習Python的常用工具為Anaconda,其中包括所有數(shù)據(jù)分析的關(guān)鍵包,不需要再次安裝,但可以在命令行中使用pip更新:

pipinstallnumpy–U

可以在/doc/stable/上查閱NumPy的使用文檔。5.2NumPy數(shù)組基礎數(shù)組是NumPy中的核心類型,全稱為N維數(shù)組(N-dimensionalArray,ndarray),整個NumPy模塊都是圍繞數(shù)組來構(gòu)建的,它是一個固定大小和形狀的大數(shù)據(jù)集容器,該對象由兩部分組成:(1) 實際的數(shù)據(jù);(2) 描述這些數(shù)據(jù)的元數(shù)據(jù);大部分的數(shù)組操作僅僅修改元數(shù)據(jù)的部分,而不改變底層的實際數(shù)據(jù)。

NumPy.array和標準的Python庫中的Array.array是不一樣的,標準的Python庫中的Array.array只能處理一維數(shù)組,且所有元素的類型必須是一致的,支持的數(shù)據(jù)類型有整型、浮點型以及復數(shù)型,但這些類型不能夠滿足科學計算的需求,因此NumPy中添加了許多其他的數(shù)據(jù)類型,如bool、int、int64、float32、complex64等。

同時,NumPy數(shù)組有許多特有的屬性。(見表5-1)5.2.1數(shù)組的屬性屬性說明.ndim秩,即軸的數(shù)量或維度的數(shù)量.shapendarray對象的尺度,對于矩陣,n行m列.sizendarray對象元素的個數(shù),相當于.shape中n*m的值.dtypendarray對象的元素類型.itemsizendarray對象中每個元素的大小,以字節(jié)為單位.nbytesndarray對象中元素連續(xù)內(nèi)存的大小表5-1NumPy數(shù)組常見屬性列表5.2.1數(shù)組的屬性-實例importnumpyasnparray=np.array([[1,2,3],[4,5,6]])#定義數(shù)組print(array.ndim)#查看數(shù)組的秩print(array.shape)#查看數(shù)組的形狀print(array.size)#查看數(shù)組元素個數(shù)print(array.dtype)#查看數(shù)組元素類型print(array.itemsize)#查看元素所占字節(jié)print(array.nbytes)#數(shù)組所占內(nèi)存大小運行結(jié)果:2(2,3)6int32424[例5-1]構(gòu)建一個二維數(shù)組arr,并查看數(shù)組的屬性特點。5.2.1數(shù)組的屬性-實例[思考題]構(gòu)建一個二維數(shù)組arr,請寫出數(shù)組屬性的輸出結(jié)果。importnumpyasnp#定義數(shù)組array=arr=np.array([[iforiinrange(5)],[iforiinrange(5,10)]])print(array.ndim)#查看數(shù)組的秩print(array.shape)#查看數(shù)組的形狀print(array.size)#查看數(shù)組元素個數(shù)print(array.dtype)#查看數(shù)組元素類型print(array.itemsize)#查看元素所占字節(jié)print(array.nbytes)#數(shù)組所占內(nèi)存大小運行結(jié)果:2(2,5)10int324405.2.2創(chuàng)建數(shù)組在使用數(shù)組前,必須首先導入NumPy模塊。導入格式:importnumpyasnp1、利用np.array()函數(shù)生成數(shù)組利用np.array()函數(shù)來創(chuàng)建,函數(shù)的參數(shù)可以是元組、列表,也可是另一個數(shù)組。語法格式為:X=np.array(list/tuple)或者X=np.array(list/tuple,dtype=np.dtype)注:當np.array()不指定dtype時,NumPy將根據(jù)數(shù)據(jù)情況自動匹配一個dtype類型。[例5-2]以列表創(chuàng)建:a=np.array([1,2,3,4]) d=np.array([[1,2,3],[4,5,6]])

[例5-3]以元組創(chuàng)建:b=np.array((1,2,3,4),dtype=np.float32)以列表+元組創(chuàng)建:c=np.array([[1,2],[3,4],(0.1,0.8)])注:若數(shù)值類型不同時,會將其合并為類型范圍較大的一種5.2.2創(chuàng)建數(shù)組2、利用內(nèi)置函數(shù)產(chǎn)生特定形式的數(shù)組函數(shù)說明np.arange(n)類似range()函數(shù),返回ndarray類型,元素從0到n-1np.ones(shape)根據(jù)shape生成一個全1數(shù)組,shape是元組類型,默認浮點型np.zeros(shape)根據(jù)shape生成一個全0數(shù)組,shape是元組類型,默認浮點型np.full(shape,val)根據(jù)shape生成一個數(shù)組,每個元素值都是valnp.eye(n)創(chuàng)建一個正方的n*n單位矩陣,對角線為1,其他為0表5-2NumPy常見內(nèi)置函數(shù)2、利用內(nèi)置函數(shù)產(chǎn)生特定形式的數(shù)組1)

np.zeros()函數(shù)、np.ones()函數(shù)和np.eye()函數(shù):

語法:X=np.xxx(shape,dtype=float)注:np.zeros()函數(shù)是生成一個數(shù)值全為零的數(shù)組,其中的行列數(shù)可以自定義。數(shù)值類型默認為浮點型。np.ones()函數(shù)用法與np.zeros()函數(shù)完全相同,只有數(shù)值不同。[例5-4]使用np.zeros()函數(shù)創(chuàng)建全0數(shù)組。5.2.2創(chuàng)建數(shù)組5.2.2創(chuàng)建數(shù)組2、利用內(nèi)置函數(shù)產(chǎn)生特定形式的數(shù)組2)np.arange()函數(shù)

語法:X=np.arange([start,]stop[,step,],dtype=None)注:np.arange()函數(shù)可以產(chǎn)生一個等距數(shù)組,其中:[]內(nèi)的內(nèi)容可省略,start的默認值為0,step的默認值為1。故而,參數(shù)個數(shù)可以為1個、2個或3個。

當只含一個參數(shù)時,即只有stop參數(shù),此時將生成一個從0到stop-1,步長為1的整數(shù)數(shù)組?!纠?-5-Part1】當含2個參數(shù)時,即指定起始位置,生成一個從start到stop-1,步長為1的整數(shù)數(shù)組?!纠?-5-Part2】當含3個參數(shù)時,即指定起始位置與步長,生成一個從start到stop-1,步長為定值的數(shù)組,指定的步長可以是浮點型?!纠?-5-Part3】[例5-5]使用np.arange創(chuàng)建數(shù)組,分別帶有1個參數(shù)、2個參數(shù)和3個參數(shù)。首先創(chuàng)建只帶一個參數(shù)的,代碼及輸出結(jié)果如下:【例5-5-Part1】【例5-5-Part2】【例5-5-Part3】5.2.2創(chuàng)建數(shù)組2、利用內(nèi)置函數(shù)產(chǎn)生特定形式的數(shù)組3)np.linspace()函數(shù):

語法:np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)注:Numpy中的linspace函數(shù)可以用來創(chuàng)建由等差數(shù)列構(gòu)成的一維數(shù)組。相關(guān)的參數(shù)以及說明見下一張PPT表格。5.2.2創(chuàng)建數(shù)組2、利用內(nèi)置函數(shù)產(chǎn)生特定形式的數(shù)組3)np.linspace()函數(shù):表5-3linspace函數(shù)的參數(shù)及說明5.2.2創(chuàng)建數(shù)組[例5-6]使用linspace函數(shù)生成均勻分布的數(shù)組,代碼及輸出結(jié)果如下:2、利用內(nèi)置函數(shù)產(chǎn)生特定形式的數(shù)組3)np.linspace()函數(shù):5.2.2創(chuàng)建數(shù)組4)np.empty()函數(shù):注:np.empty()函數(shù)是生成一個指定形狀和類型且全為空的數(shù)組,該函數(shù)只是讓系統(tǒng)分配指定大小的內(nèi)容,而并沒有初始化,里面的值是隨機的。[例5-7]使用np.empty生成一個指定形狀和類型且全為空的數(shù)組,代碼及輸出結(jié)果如下:2、利用內(nèi)置函數(shù)產(chǎn)生特定形式的數(shù)組5.2.2創(chuàng)建數(shù)組3、生成隨機數(shù)組1)

numpy.random.rand(d0,d1,...,dn)函數(shù)注:創(chuàng)建給定形狀的數(shù)組,并使用[0.0,1.0)上均勻分布的隨機浮點數(shù)填充該數(shù)組。當函數(shù)沒有參數(shù)時,返回一個隨機浮點數(shù),當函數(shù)有一個參數(shù)時,返回該參數(shù)長度大小的一維隨機浮點數(shù)數(shù)組,當函數(shù)有兩個及以上參數(shù)時,則返回對應維度的數(shù)組。2)numpy.random.randint(low,high=None,size=None,dtype=int)函數(shù)注:返回隨機整數(shù)數(shù)組,數(shù)據(jù)值位于半開區(qū)間[low,high)。可以用size設置數(shù)組的形狀,例如,若size為(m,n,k),則繪制m*n*k形狀的樣本。size默認值為“None”,在這種情況下,將返回單個值。5.2.2創(chuàng)建數(shù)組3、生成隨機數(shù)組3)numpy.random.randn(d0,d1,...,dn)函數(shù)注:返回一個或一組服從標準正態(tài)分布的隨機樣本值。當函數(shù)沒有參數(shù)時,則返回一個浮點數(shù),當函數(shù)有一個參數(shù)時,則返回秩為1的數(shù)組,不能表示向量和矩陣,當函數(shù)有兩個及以上參數(shù)時,則返回對應維度的數(shù)組,能表示向量或矩陣。此外,np.random.standard_normal()函數(shù)與np.random.randn()類似,但是np.random.standard_normal()的輸入?yún)?shù)為元組(tuple)。5.2.2創(chuàng)建數(shù)組3、生成隨機數(shù)組4)

numpy.random.shuffle(x)函數(shù)注:類似洗牌操作,修改參數(shù)x。參數(shù)x為要洗牌的數(shù)組、列表或可變序列。5)numpy.random.permutation(x)函數(shù)注:隨機排列一個序列,或返回一個排列的范圍。如果x是一個多維數(shù)組,則它只會沿著其第一個索引移動。5.2.2創(chuàng)建數(shù)組3、生成隨機數(shù)組[例5-8]使用random模塊生成隨機數(shù)組,代碼及輸出結(jié)果如下:5.2.3數(shù)組的數(shù)據(jù)類型數(shù)據(jù)類型說明bool布爾類型,true或falseintc與C語言中的int類型一致,一般是int32或int64intp用于索引的整數(shù),int32或int64int8字節(jié)長度的整數(shù),取值:[‐128,127]int1616位長度的整數(shù),取值:[‐32768,32767]int32int64uint88位無符號整數(shù),取值:[0,255]uint1616位無符號整數(shù),取值:[0,65535]uint32uint64float1616位半精度浮點數(shù):1位符號位,5位指數(shù),10位尾數(shù)float3232位半精度浮點數(shù):1位符號位,8位指數(shù),23位尾數(shù)float6464位半精度浮點數(shù):1位符號位,11位指數(shù),52位尾數(shù)complex64復數(shù)類型,實部和虛部都是32位浮點數(shù)complex128復數(shù)類型,實部和虛部都是64位浮點數(shù)表5-4數(shù)組的數(shù)據(jù)類型5.2.3數(shù)組的數(shù)值類型[例5-9]創(chuàng)建整型和浮點型的混合類型數(shù)組,NumPy會將其統(tǒng)一改為浮點型。

當使用元組或列表時作為創(chuàng)建數(shù)組的參數(shù)時,若數(shù)據(jù)類型不同,會將其類型統(tǒng)一為類型范圍較大的一種,即當傳入的數(shù)據(jù)有多種類型時,NumPy會自動進行判斷,將數(shù)組轉(zhuǎn)化為最為通用的類型。5.2.4數(shù)組的迭代一維數(shù)組:迭代返回對應數(shù)組中的每一個元素。多維數(shù)組:迭代返回值是一個維度減一的數(shù)組。多維數(shù)組:可以進行列迭代和逐個元素迭代。行迭代[例5-10]一維和多維數(shù)組迭代。[例5-11]多維數(shù)組的列迭代和逐個元素迭代。列迭代逐個迭代5.2.5數(shù)組的索引和切片1、一維數(shù)組的索引

一維數(shù)組的索引與列表類似,不僅支持單個元素的索引,還支持負數(shù)索引與切片,負索引或切片后得到的結(jié)果仍是一個數(shù)組,可以進行數(shù)組的相關(guān)操作。[例5-12]一維數(shù)組索引。2、多維數(shù)組的索引---多重索引單個元素:array[行數(shù)][列數(shù)]某一行元素:array[行數(shù)]或array[行數(shù),:]某一列元素:array[:,列數(shù)]某幾行和某幾列:[起始行:終止行,起始列:終止列][例5-13]多維數(shù)組索引。5.2.5數(shù)組的索引和切片1、合并 在水平方向上,一般采用hstack()函數(shù)實現(xiàn)兩個數(shù)組的合并。 具體語法為:np.hstack((a,b))。 此外,concatenate(axis=1)函數(shù)和column_stack()函數(shù)可以實現(xiàn)類似的效果。[例5-14]數(shù)組水平方向上的合并。5.2.6數(shù)組的合并和拆分1、合并

在豎向方向上,一般采用vstack()函數(shù)實現(xiàn)兩個數(shù)組的合并。

具體語法為:np.vstack((a,b))。

當參數(shù)axis設置為0時,concatenate()函數(shù)可以得到同樣的結(jié)果。row_stack()函數(shù)亦如是。除此之外,還有一種是深向合并的操作,它是沿著第三個坐標軸的方向來合并,使用到的函數(shù)是dstack()。[例5-15]數(shù)組豎向及深向上的合并。5.2.6數(shù)組的合并和拆分2、拆分

水平拆分:對于一個n*m的數(shù)組,可以沿著水平方向?qū)⑵洳鸱譃閙部分,并且各部分的大小和形狀完全相同:hsplit()、split(axis=1)

豎向拆分:對于一個n*m的數(shù)組,也可以沿著豎向(按行)將其拆分為n部分,并且各部分的大小和形狀完全相同:vsplit()、split(axis=0)

深向拆分:對于一個n*m的數(shù)組,也可以沿著深向?qū)⑵洳鸱譃閚部分:dsplit()5.2.6數(shù)組的合并和拆分[例5-16]數(shù)組的拆分。5.2.6數(shù)組的合并和拆分數(shù)組的相關(guān)操作025.3.1統(tǒng)計相關(guān)操作NumPy提供了很多統(tǒng)計函數(shù),可以支持對數(shù)組的多種統(tǒng)計操作。例如,從數(shù)組中查找最小元素,最大元素,計算均值、標準差和方差等。

常見的統(tǒng)計函數(shù)及說明見表5-5。函數(shù)說明.sum()數(shù)組求和,默認對所有元素求和.prod()數(shù)組求積,默認對所有元素求積.max()和.min()求數(shù)組元素中的最大值或者最小值.argmax()和.argmin()求數(shù)組元素中的最大值或者最小值的位置.mean()求數(shù)組所有元素的均值.std()和.var()求數(shù)組元素中的標準差或方差表5-5數(shù)組的統(tǒng)計操作[例5-17]數(shù)組統(tǒng)計相關(guān)操作實例。5.3.1統(tǒng)計相關(guān)操作1、修改數(shù)組形狀:.shape屬性[例5-18]使用.shape屬性修改數(shù)組形狀。5.3.2形狀相關(guān)操作5.3.2形狀相關(guān)操作2、不改變數(shù)組自身形狀的方法:reshape()方法 reshape()方法也可以實現(xiàn)類似.shape屬性的效果,但是它不改變原數(shù)組的形狀,并返回一個新的數(shù)組。注意:形狀參數(shù)必須與數(shù)組大小一致,否之會拋出異常。 reshape()方法可以接受一個“-1”作為參數(shù),當某一維度是-1時,NumPy會自動根據(jù)其他維度來計算這一維度的大小。[例5-19]使用.reshape()方法不改變原數(shù)組形狀。[例5-20]使用“-1”作為.reshape()參數(shù)。3、改變數(shù)組自身形狀的方法:.resize()方法.resize()方法的作用與reshape()方法的功能一致,但改變原來數(shù)組的形狀。它的原理是首先將原來數(shù)組轉(zhuǎn)變?yōu)橐痪S數(shù)組,再判斷元素的個數(shù),若缺失,則缺失元素以0補全;若過滿,則只截取所需元素,從而實現(xiàn)對數(shù)組形狀的修改。注意:.resize()方法不支持-1參數(shù)。[例5-21]使用.resize()方法改變數(shù)組自身形狀。5.3.2形狀相關(guān)操作4、數(shù)組的轉(zhuǎn)置:.T屬性和.transpose()方法對于數(shù)組而言,轉(zhuǎn)置可以通過.T屬性和.transpose()方法實現(xiàn)。一般情況下,這兩種方法是等價的。對一維數(shù)組而言,轉(zhuǎn)置返回它的本身;對于二維數(shù)組而言,轉(zhuǎn)置相當于將其行列互換;對于多維數(shù)組而言,轉(zhuǎn)置是將所有的維度反向,原來的第一維變?yōu)樽詈笠痪S,原來的最后一維變成第一維。[例5-22]數(shù)組的轉(zhuǎn)置。5.3.2形狀相關(guān)操作5、數(shù)組的降維:.flat屬性、.flatten()方法和.revel()方法數(shù)組的降維是針對多維數(shù)組而言的,可以利用.flat屬性得到數(shù)組中的一個一維引用數(shù)組,同時,此屬性支持修改對應數(shù)值,從而使原數(shù)組的對應位置有相應的改變。.flatten()方法和.revel()方法也可以實現(xiàn)將數(shù)組返回一維化的結(jié)果,但是.flatten()方法返回的是原數(shù)組的一個復制,修改它對原數(shù)組不產(chǎn)生影響。.revel()方法是返回引用,只有在必要時返回復制。[例5-23]數(shù)組的降維。5.3.2形狀相關(guān)操作5.3.3四則運算&點乘&比較操作[例5-24]數(shù)組的四則運算、點乘與比較操作。數(shù)組與數(shù)字之間的四則運算,規(guī)則是數(shù)組元素分別對應進行相應運算。[例5-24]數(shù)組的四則運算、點乘與比較操作。數(shù)組與數(shù)組之間也可以進行四則運算,前提是參與運算的數(shù)組需有相同的行列。運算規(guī)則是按位運算,對應位置進行運算。此外,數(shù)組還支持冪運算、取余和取整運算。5.3.3四則運算&點乘&比較操作[例5-24]數(shù)組的四則運算、點乘與比較操作。在數(shù)學上,二維數(shù)組可以看成矩陣,一維數(shù)組可以看成向量,它們還支持點乘運算,用.dot()函數(shù)實現(xiàn)。5.3.3四則運算&點乘&比較操作[例5-24]數(shù)組的四則運算、點乘與比較操作。數(shù)組還支持其他運算,例如,比較和邏輯操作。在比較操作中,數(shù)組可以與一個數(shù)進行比較,會返回一個布爾型的數(shù)組;數(shù)組與數(shù)組之間也可以進行比較,返回一個布爾型數(shù)組。5.3.3四則運算&點乘&比較操作數(shù)組讀寫035.4.1數(shù)組的讀取

從文本文件中讀取數(shù)據(jù):np.loadtxt()函數(shù)。語法格式為:numpy.loadtxt(fname,dtype=<class'float'>,comments='#',delimiter=None,converters=None,skiprows=0,usecols=None,unpack=False,ndmin=0,encoding='bytes',max_rows=None,*,like=None)

說明如表5-6。[例5-25]從文本文件中讀取數(shù)據(jù),讀出的數(shù)據(jù)為數(shù)組類型。首先讀取data目錄下以空格分隔數(shù)據(jù)的test.txt文件。5.4.1數(shù)組的讀取如果文件中的數(shù)據(jù)不是空格分隔,可以設置參數(shù)delimiter指定分隔符。文件格式:1,2,3,4,5,67,8,9,10,11,12如果文件中的含有字符串的數(shù)組,可以加上一個參數(shù)值。文件格式:

namepricemysql18python205.4.1數(shù)組的讀取

如果文件中包含字符串和數(shù)值型的混合數(shù)據(jù)(如test2.txt中,有'gender','age','weight'三列數(shù)據(jù)),可以如下指定數(shù)據(jù)類型進行讀取。5.4.1數(shù)組的讀取將數(shù)組寫入文件:np.savetxt(),寫入時默認使用科學記數(shù)法的形式保存數(shù)字。語法格式如下:np.savetxt(fname,X,fmt='%.18e',delimiter='',newline='\n',header='',footer='',comments='#',encoding=None)說明如下表。存入文件數(shù)據(jù)[例5-26]數(shù)組的寫入。首先使用默認參數(shù),將一個二維數(shù)組寫入文件,代碼如下:5.4.2數(shù)組的寫入可以使用fmt參數(shù)設置數(shù)據(jù)寫入的格式可以用delimiter參數(shù)指定分隔符存入文件數(shù)據(jù)存入文件數(shù)據(jù)5.4.2數(shù)組的寫入本章實踐例題本章實踐例題[例5-27]數(shù)組生成實例。本例介紹了幾種常用的數(shù)組生成方法,包括生成隨機數(shù)數(shù)組、生成均勻分布的數(shù)組等。實例代碼如下:本章實踐例題[例5-27]數(shù)組生成實例。本例介紹了幾種常用的數(shù)組生成方法,包括生成隨機數(shù)數(shù)組、生成均勻分布的數(shù)組等。實例代碼如下:本章實踐例題[例5-28]數(shù)組索引及切片實例。本例介紹了如何通過索引

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論