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

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論