3.4 NumPy數(shù)組對象基本操作_第1頁
3.4 NumPy數(shù)組對象基本操作_第2頁
3.4 NumPy數(shù)組對象基本操作_第3頁
3.4 NumPy數(shù)組對象基本操作_第4頁
3.4 NumPy數(shù)組對象基本操作_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Python數(shù)據(jù)分析基礎與應用模塊3數(shù)據(jù)分析應用NumPy3.4NumPy數(shù)組對象基本操作1.普通索引運算2.切片索引運算NumPy數(shù)組的切片是使用形如[開始索引:結束索引:步長]的語法格式,通過指定開始索引(默認值無窮?。?、結束索引(默認值無窮大)和步長(默認值1),從數(shù)組中取出指定部分的元素并構成新的數(shù)組。3.4.1NumPy數(shù)組索引和切片3.4.1NumPy數(shù)組索引和切片(1)使用NumPy內置函數(shù)slice()構造切片對象NumPy內置函數(shù)slice()可以用來構造切片對象,該函數(shù)需要傳遞三個參數(shù)值分別是start(起始索引)、stop(終止索引)和step(步長),通過它可以實現(xiàn)從原數(shù)組的上切割出一個新數(shù)組。3.4.1NumPy數(shù)組索引和切片(2)使用省略號實現(xiàn)二維數(shù)組的切片操作切片還可以使用省略號“…”,如果在行位置使用省略號,那么返回值將包含所有行元素,反之,則包含所有列元素。①返回二維數(shù)組的第2列代碼如下:print(array1[...,1])輸出結果:[258]3.4.1NumPy數(shù)組索引和切片(2)使用省略號實現(xiàn)二維數(shù)組的切片操作②返回二維數(shù)組的第2行代碼如下:print(array1[1,...])輸出結果:[456]③返回二維數(shù)組第2列后的所有項代碼如下:print(array1[...,1:])[[23][56][89]]3.4.2NumPy副本和視圖1.賦值操作賦值操作是數(shù)組引用的一種方法。例如,將array1數(shù)組賦值給變量array2,被賦值后的變量array2與array1組具有相同的內存id。因此,無論操作array1、array2中哪個數(shù)組,另一個數(shù)組也會受到影響。2.通過數(shù)組切片創(chuàng)建數(shù)組視圖切片操作返回的是數(shù)組視圖,對數(shù)組視圖的修改會影響到原數(shù)組。3.4.2NumPy副本和視圖3.使用ndarray對象的view()方法返回一個新生成的數(shù)組副本ndarray對象的view()方法用于返回一個新生成的數(shù)組副本,因此對該數(shù)組的操作,不會影響到原數(shù)組。4.使用ndarray對象的copy()方法返回原數(shù)組的副本ndarray對象的copy()方法返回原數(shù)組的副本,對副本的修改不會影響到原數(shù)組。3.4.3NumPy數(shù)組高級索引1.利用整數(shù)數(shù)組進行索引利用整數(shù)數(shù)組進行索引,這里所說的整數(shù)數(shù)組可以是NumPy的ndarray對象,也可以是Python中內置的序列l(wèi)ist、元組tuple等可迭代類型。利用整數(shù)數(shù)組進行索引,它可以選擇數(shù)組中的任意一個元素,例如,選擇第幾行第幾列的某個元素。(1)對于一維數(shù)組,可以使用正向或負向索引值選擇一維數(shù)組中的任意一個元素,例如array1[[0,1,-1]],分別取數(shù)組array1的第1、2以及最后一個一維數(shù)組元素。3.4.3NumPy數(shù)組高級索引(2)對于二維數(shù)組,通過數(shù)組元素的行索引值選擇二維數(shù)組中的任意一行,例如array2[[0,2]],分別取array2的第1行和第3行。也可以通過數(shù)組元素的列索引值選擇二維數(shù)組的任意一列,這時行使用“:”或“…”進行選擇,例如array2[...,[0,2]]、array2[:,[0,2]],分別取array2的第1列和第3列。(3)對于二維數(shù)組,通過數(shù)組元素的行索引值與列索引值配對組合選擇二維數(shù)組中的任意一個元素,例如array2[[0,1,2],[0,1,0]],其中左側的括號[0,1,2]代表行索引,右側的括號[0,1,0]代表列索引,將行、列索引值組合會得到(0,0)、(1,1)和(2,0),它們分別對應著輸出原數(shù)組中的索引位置對應的數(shù)組元素,即第1行第1列數(shù)據(jù)元素、第2行第2列數(shù)組元素、第3行第1列數(shù)組元素。3.4.3NumPy數(shù)組高級索引2.利用布爾類型的數(shù)組進行索引當輸出的結果需要經(jīng)過布爾運算(例如比較運算)時,此時會使用到另一種高級索引方式,即布爾數(shù)組索引。布爾數(shù)組索引通過布爾類型的數(shù)組對數(shù)組元素進行索引,布爾類型的數(shù)組可以通過手動設置布爾值構造,也可以通過關系運算來產生布爾類型的數(shù)組。3.4.3NumPy數(shù)組高級索引3.花式索引花式索引也可以理解為整數(shù)數(shù)組索引,但是它們之間又略有不同,花式索引也會生成一個新的副本。(1)一維數(shù)組使用花式索引當原數(shù)組是一維數(shù)組時,使用一維整型數(shù)組作為索引,那么索引結果就是相應索引位置上的元素。(2)二維數(shù)組使用花式索引如果原數(shù)組是二維數(shù)組,那么索引數(shù)組也需要是二維的,索引數(shù)組的元素值與被索引數(shù)組的每一行相對應。3.4.3NumPy數(shù)組高級索引3.花式索引(3)使用倒序索引數(shù)組實現(xiàn)花式索引代碼如下:print(array2[[-4,-2,-1]])輸出結果:[[891011][16171819][20212223]]3.4.3NumPy數(shù)組高級索引3.花式索引(4)同時使用多個索引數(shù)組調整原數(shù)組元素的順序還可以同時使用多個索引數(shù)組調整原數(shù)組元素的順序,但這種情況下需要添加np.ix_。代碼如下:print(array2[np.ix_([1,5,4,2],[0,3,1,2])])輸出結果如下:[[4756][20232122][16191718][811910]]3.4.4NumPy數(shù)組遍歷NumPy提供了一個迭代器對象nditer,它可以配合for循環(huán)完成對NumPy數(shù)組元素的遍歷操作。1.以默認遍歷順序遍歷NumPy數(shù)組(1)使用arange()函數(shù)創(chuàng)建一個3×4數(shù)組代碼如下:importnumpyasnparray1=np.arange(0,60,5)array2=array1.reshape(3,4)print(array2)3.4.4NumPy數(shù)組遍歷1.以默認遍歷順序遍歷NumPy數(shù)組(2)使用nditer迭代器,并使用for進行遍歷代碼如下:foriteminnp.nditer(array2):print(item,end="")輸出結果:05101520253035404550553.4.4NumPy數(shù)組遍歷1.以默認遍歷順序遍歷NumPy數(shù)組(3)對二維數(shù)組進行轉置操作代碼如下:array3=array2.Tprint(array3)輸出結果:#轉置數(shù)組array3[[02040][52545][103050][153555]]3.4.4NumPy數(shù)組遍歷1.以默認遍歷順序遍歷NumPy數(shù)組(4)二維數(shù)組array3轉置后遍歷輸出代碼如下:foriteminnp.nditer(array3):print(item,end="")輸出結果:05101520253035404550553.4.4NumPy數(shù)組遍歷2.以指定的遍歷順序遍歷NumPy數(shù)組在內存中,Numpy數(shù)組提供了兩種存儲數(shù)據(jù)的方式,分別是C-order(行優(yōu)先順序)與Fortrant-order(列優(yōu)先順序)。那么nditer迭代器又是如何處理具有特定存儲順序的數(shù)組呢?其實它選擇了一種與數(shù)組內存布局一致的順序,之所以這樣做,是為了提升數(shù)據(jù)的訪問效率。在默認情況下,當遍歷數(shù)組中元素的時候,不需要考慮數(shù)組的存儲順序,這一點通過遍歷上述數(shù)組的轉置數(shù)組已得以驗證。3.4.4NumPy數(shù)組遍歷3.遍歷數(shù)組時控制能否修改數(shù)組元素值nditer對象提供了一個可選參數(shù)op_flags,它表示能否在遍歷數(shù)組時對元素進行修改。它提供了以下三種模式。(1)read-only(只讀模式)在只讀模式下,遍歷時不能修改數(shù)組中的元素。(2)read-write(讀寫模式)在讀寫模式下,遍歷時可以修改元素值。(3)write-only(只寫模式)在只寫模式下,遍歷時可以修改元素值。3.4.5NumPy數(shù)組變維操作1.使用NumPy的ndim屬性查看數(shù)組的維度代碼如下:importnumpyasnparray1=np.array([[1,2,3,4],[4,5,6,7],[9,10,11,23]])print(array1.ndim)輸出結果:23.4.5NumPy數(shù)組變維操作2.使用ndim參數(shù)創(chuàng)建不同維度的數(shù)組代碼如下:#輸出一個二維數(shù)組array2=np.array([1,2,3,4,5,6],ndmin=2)print(array2)print(array2.ndim)輸出結果:[[123456]]23.4.5NumPy數(shù)組變維操作3.使用reshape()函數(shù)實現(xiàn)數(shù)組變維數(shù)組的形狀指的是多維數(shù)組的行數(shù)和列數(shù),Numpy庫提供的reshape()函數(shù)可以改變多維數(shù)組行數(shù)和列數(shù),在不改變數(shù)組元素的前提下,修改數(shù)組的形狀,從而達到數(shù)組變維的目的,即對數(shù)組形狀的進行重塑,將3行2列的數(shù)組變維為2行3列的數(shù)組的示例如圖3-6所示。圖3-63行2列數(shù)組變維為2行3列數(shù)組示意圖3.4.6NumPy數(shù)組轉置操作1.使用numpy.transpose()函數(shù)和ndarray.T方法實現(xiàn)數(shù)組轉置操作numpy.transpose()函數(shù)用于將數(shù)組的維度值進行對換,例如二維數(shù)組維度(2,4)使用該方法對換后即可變?yōu)?4,2)。二維數(shù)組使用transpose()函數(shù)可以實現(xiàn)矩陣轉置,其語法格式如下:numpy.transpose(array,axes)其參數(shù)說明如下:?array:待轉置操作的數(shù)組?axes:為可選參數(shù),元組或者整數(shù)列表,將會按照該參數(shù)進行轉置。ndarray.T的使用方法與transpose()函數(shù)類似,這里不再贅述。3.4.6NumPy數(shù)組轉置操作2.使用numpy.rollaxis()函數(shù)實現(xiàn)沿著指定的軸向后滾動至規(guī)定的位置numpy.rollaxis()函數(shù)的格式如下:numpy.rollaxis(array,axis,start)其參數(shù)說明如下:?array:NumPy數(shù)組;?axis:沿著哪條軸向后滾動,其它軸的相對位置不會改變;?start:默認以0軸開始,可以根據(jù)數(shù)組維度調整它的值。3.4.6NumPy數(shù)組轉置操作3.使用numpy.swapaxes()函數(shù)對數(shù)組的軸進行對換numpy.swapaxes()函數(shù)的語法格式如下:numpy.swapaxes(array,axis1,axis2)3.4.7連接與分割NumPy數(shù)組操作1.連接數(shù)組操作使用numpy.concatenate()函數(shù)連接數(shù)組numpy.concatenate()函數(shù)用于沿指定軸連接相同形狀的兩個或多個數(shù)組,其語法格式如下:numpy.concatenate((array1,array2,...),axis)其參數(shù)說明如下:?array1,array2,……:表示一系列相同類型的數(shù)組;?axis:沿著該參數(shù)指定的軸連接數(shù)組,默認為0。3.4.7連接與分割NumPy數(shù)組操作2.分割數(shù)組操作numpy.split()函數(shù)用于沿指定的軸將數(shù)組分割為多個子數(shù)組,其語法格式如下:numpy.split(array,indices_or_sections,axis)其參數(shù)說明如下:?array:被分割的數(shù)組。?indices_or_sections:若是一個整數(shù),代表用該整數(shù)平均切分,若是一個數(shù)組,則代表沿軸切分的位置(左開右閉)。?axis:默認為0,表示橫向切分;為1時表示縱向切分。3.4.8NumPy數(shù)組元素增刪改查操作1.使用resize()函數(shù)和reshape()函數(shù)修改數(shù)組的形狀numpy的resize()函數(shù)用于返回指定形狀的新數(shù)組,其語法格式如下:numpy.resize(arr,shape)3.4.8NumPy數(shù)組元素增刪改查操作2.使用numpy.append()函數(shù)在數(shù)組的末尾添加元素值numpy的append()函數(shù)用于在數(shù)組的末尾添加元素值,且返回一個一維數(shù)組。其語法格式如下:numpy.append(array,values,axis=None)其參數(shù)說明如下:?array:待添加元素的數(shù)組;?values:向array數(shù)組中添加的值,需要和array數(shù)組的形狀保持一致;?axis:默認為None,返回的是一維數(shù)組;當axis=0時,追加的值會被添加到行,而列數(shù)保持不變;若axis=1時,追加的值會被添加到列,而行數(shù)保持不變。3.4.8NumPy數(shù)組元素增刪改查操作3.使用numpy.insert()函數(shù)沿指定軸在給定索引值的前一個位置插入相應的元素值numpy的insert()函數(shù)用于沿指定的軸,在給定索引值的前一個位置插入相應的元素值,如果沒有提供軸,則數(shù)組被展開為一維數(shù)組。其語法格式如下:numpy.insert(array,obj,values,axis)其參數(shù)說明如下:?array:待插入元素值的數(shù)組?obj:表示索引值,在該索引值之前插入values值;?values:待插入的值;?axis:指定的軸,如果未提供,則輸入數(shù)組會被展開為一維數(shù)組。3.4.8NumPy數(shù)組元素增刪改查操作4.使用numpy.delete()函數(shù)從數(shù)組中刪除指定的子數(shù)組numpy的delete()函數(shù)用于從數(shù)組中刪除指定的子數(shù)組,并返回一個新數(shù)組。它與insert()函數(shù)相似,若不提供axis參數(shù),則輸入數(shù)組被展開為一維數(shù)組。其語法格式如下:numpy.delete(array,obj,axis)其參數(shù)說明如下:?array:待刪除子數(shù)組的數(shù)組;?obj:整數(shù)或者整數(shù)數(shù)組,表示要被刪除的數(shù)組元素或者子數(shù)組;?axis:沿著哪條軸刪除子數(shù)組。3.4.8NumPy數(shù)組元素增刪改查操作5.使用numpy.argwhere()函數(shù)獲取數(shù)組中非0元素的索引numpy的argwhere()函數(shù)用于返回數(shù)組中非0元素的索引,若是多維數(shù)組則返回行、列索引組成的索引坐標。3.4.9NumPy字符串處

溫馨提示

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

評論

0/150

提交評論