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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論