Python數(shù)據(jù)分析與挖掘 課件 第 3 章 NumPy數(shù)值計算基礎(chǔ)_第1頁
Python數(shù)據(jù)分析與挖掘 課件 第 3 章 NumPy數(shù)值計算基礎(chǔ)_第2頁
Python數(shù)據(jù)分析與挖掘 課件 第 3 章 NumPy數(shù)值計算基礎(chǔ)_第3頁
Python數(shù)據(jù)分析與挖掘 課件 第 3 章 NumPy數(shù)值計算基礎(chǔ)_第4頁
Python數(shù)據(jù)分析與挖掘 課件 第 3 章 NumPy數(shù)值計算基礎(chǔ)_第5頁
已閱讀5頁,還剩59頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Python數(shù)據(jù)分析與可視化第3章NumPy數(shù)值計算基礎(chǔ)第3章NumPy數(shù)值計算基礎(chǔ)NumPy是在1995年誕生的Python庫Numeric的基礎(chǔ)上建立起來的,但真正促使NumPy的發(fā)行的是Python的SciPy庫。但SciPy中并沒有合適的類似于Numeric中的對于基礎(chǔ)數(shù)據(jù)對象處理的功能。于是,SciPy的開發(fā)者將SciPy中的一部分和Numeric的設(shè)計思想結(jié)合,在2005年發(fā)行了NumPy。NumPy是Python的一種開源的數(shù)值計算擴展庫。它包含很多功能,如創(chuàng)建n維數(shù)組(矩陣)、對數(shù)組進行函數(shù)運算、數(shù)值積分等。NumPy的誕生彌補了這些缺陷,它提供了兩種基本的對象:ndarray:是儲存單一數(shù)據(jù)類型的多維數(shù)組。ufunc:是一種能夠?qū)?shù)組進行處理的函數(shù)。

NumPy常用的導(dǎo)入格式:importnumpyasnp23.1NumPy多維數(shù)組33.1.1創(chuàng)建數(shù)組對象3.1.2

ndarray對象屬性和數(shù)據(jù)轉(zhuǎn)換3.1.3生成隨機數(shù)3.1.4數(shù)組變換3.1NumPy多維數(shù)組通常來說,ndarray是一個通用的同構(gòu)數(shù)據(jù)容器,即其中的所有元素都需要相同的類型。利用array函數(shù)可創(chuàng)建ndarray數(shù)組。43.1.1創(chuàng)建數(shù)組對象3.1NumPy多維數(shù)組1.利用array函數(shù)創(chuàng)建數(shù)組對象array函數(shù)的格式:np.array(object,dtype,ndmin)5參數(shù)名稱說明object

接收array,表示想要創(chuàng)建的數(shù)組dtype接收data-type,表示數(shù)組所需的數(shù)據(jù)類型,未給定則選擇保存對象所需的最小類型,默認為Nonendmin接收int,制定生成數(shù)組應(yīng)該具有的最小維數(shù),默認為None表3-1.array函數(shù)的主要參數(shù)及說明3.1NumPy多維數(shù)組1.利用array函數(shù)創(chuàng)建數(shù)組對象array函數(shù)的格式:np.array(object,dtype,ndmin)6importnumpyasnpdata1=[1,3,5,7]#列表w1=np.array(data1)print('w1:',w1)data2=(2,4,6,8)#元組w2=np.array(data2)print('w2:',w2)data3=[[1,2,3,4],[5,6,7,8]]#多維數(shù)組w3=np.array(data3)print('w3:',w3)w1:[1357]w2:[2468]w3:[[1234][5678]]輸出:3.1NumPy多維數(shù)組在創(chuàng)建數(shù)組時,NumPy會為新建的數(shù)組推斷出一個合適的數(shù)據(jù)類型,并保存在dtype中,當(dāng)序列中有整數(shù)和浮點數(shù)時,NumPy會把數(shù)組的dtype定義為浮點數(shù)據(jù)類型。array函數(shù)中指定dtype。In[2]:w3=np.array([1,2,3,4],dtype='float64')print(w3.dtype)Out[2]:float643.1NumPy多維數(shù)組2.專門創(chuàng)建數(shù)組的函數(shù)arange函數(shù):創(chuàng)建等差一維數(shù)組格式:np.arange([start,]stop,[step,]dtype)8參數(shù)名稱說明start:起始值,默認從0開始;stop:結(jié)束值;生成的元素不包括結(jié)束值;step步長,可省略,默認步長為1;dtype設(shè)置元素的數(shù)據(jù)類型,默認使用輸入數(shù)據(jù)的類型。例:arange函數(shù)可以指定開始值、終值和步長創(chuàng)建一維數(shù)組,創(chuàng)建的數(shù)組不包含終值。【例3-4】指定起始值、終值及步長參數(shù)的arange。In[4]:warray=np.arange(0,1,0.2)print(warray)Out[4]:[0.0.20.40.60.8]3.1NumPy多維數(shù)組2.專門創(chuàng)建數(shù)組的函數(shù)linspace函數(shù):創(chuàng)建等差一維數(shù)組,接收元素數(shù)量作為參數(shù)。格式:np.linspace(start,stop,num,endpoint,retstep=False,dtype=None)10參數(shù)名稱說明start:起始值,默認從0開始;stop:結(jié)束值;生成的元素不包括結(jié)束值;num要生成的等間隔樣例數(shù)量例:3.1NumPy多維數(shù)組2.專門創(chuàng)建數(shù)組的函數(shù)logspace函數(shù):創(chuàng)建等比一維數(shù)組格式:np.logspace(start,stop,num,endpoint=True, base=10.0,dtype=None))11logspace的參數(shù)中,start,stop代表的是10的冪,默認基數(shù)base為10,第三個參數(shù)元素個數(shù)。例:3.1NumPy多維數(shù)組2.專門創(chuàng)建數(shù)組的函數(shù)zeros函數(shù):創(chuàng)建指定長度或形狀的全0數(shù)組格式:np.zeros(shape,

dtype=float,

order='C')12In[7]:print(np.zeros(4))print(np.zeros([3,3]))Out[7]:[0.0.0.0.][[0.0.0.][0.0.0.][0.0.0.]]3.1NumPy多維數(shù)組2.專門創(chuàng)建數(shù)組的函數(shù)13ones函數(shù):創(chuàng)建指定長度或形狀的全1數(shù)組格式:np.ones(shape,

dtype=None,

order='C')In[8]:print(np.ones(5))print(np.ones([2,3]))Out[8]:[1.1.1.1.1.][[1.1.1.][1.1.1.]]3.1NumPy多維數(shù)組2.專門創(chuàng)建數(shù)組的函數(shù)14diag函數(shù):創(chuàng)建一個對角陣。格式:np.diag(v,k=0)In[9]:print(np.diag([1,2,3,4]))Out[9]:[[1000][0200][0030][0004]]此外,使用eye函數(shù)可創(chuàng)建一個對角線為1其他位置全為0的矩陣。3.1NumPy多維數(shù)組153.1.2

ndarray對象屬性和數(shù)據(jù)轉(zhuǎn)換NumPy創(chuàng)建的ndarray對象屬性,主要有shape、size等屬性。表3-2.ndarray對象屬性及其說明屬性說明ndim返回數(shù)組的軸的個數(shù)shape返回數(shù)組的維度size返回數(shù)組元素個數(shù)dtype返回數(shù)據(jù)類型itemsize返回數(shù)組中每個元素的字節(jié)大小3.1NumPy多維數(shù)組163.1.2

ndarray對象屬性和數(shù)據(jù)轉(zhuǎn)換In[10]:warray=np.array([[1,2,3],[4,5,6]])print('秩為:',warray.ndim)print('形狀為:',warray.shape)print('元素個數(shù)為:',warray.size)Out[10]:秩為:2形狀為:(2,3)元素個數(shù)為:63.1NumPy多維數(shù)組173.1.2

ndarray對象屬性和數(shù)據(jù)轉(zhuǎn)換In[11]:warray.shape=3,2print(warray)Out[11]:[[12][34][56]]【例3-11】設(shè)置數(shù)組的shape屬性。In[12]:arr1=np.arange(6)print(arr1.dtype)arr2=arr1.astype(np.float64)print(arr2.dtype)Out[12]:int32float64【例3-12】數(shù)組的類型轉(zhuǎn)換。3.1NumPy多維數(shù)組183.1.3生成隨機數(shù)在NumPy.random模塊中,提供了多種隨機數(shù)的生成函數(shù)。如randint函數(shù)生成指定范圍的隨機整數(shù)來構(gòu)成指定形狀的數(shù)組。用法:np.random.randint(low,high=None,size=None)In[13]:arr=np.random.randint(100,200,size=(2,4))print(arr)Out[13]:[[197129112153][138195114141]]生成[0,1]之間的隨機數(shù)組。In[14]:arr1=np.random.rand(5)print(arr1)arr2=np.random.rand(4,2)print(arr2)Out[14]:[0.136546370.092180440.449856830.243743760.60841164][[0.072505180.50867613][0.218312150.23476073][0.812930960.92887008][0.283396370.82806109]]因為是隨機數(shù),每次運行代碼生成的隨機數(shù)組都不一樣。表3-3列出了random模塊常用的隨機數(shù)生成方法。3.1NumPy多維數(shù)組3.1NumPy多維數(shù)組表3-3.random模塊的常用隨機數(shù)生成函數(shù)20函數(shù)說明seed確定隨機數(shù)生成器的種子permutation返回一個序列的隨機排列或返回一個隨機排列的范圍shuffle對一個序列進行隨機排序binomial產(chǎn)生二項分布的隨機數(shù)normal產(chǎn)生正態(tài)(高斯)分布的隨機數(shù)beta產(chǎn)生beta分布的隨機數(shù)chisquare產(chǎn)生卡方分布的隨機數(shù)gamma產(chǎn)生gamma分布的隨機數(shù)uniform產(chǎn)生在[0,1)中均勻分布的隨機數(shù)3.1NumPy多維數(shù)組1.數(shù)組重塑

對于定義好的數(shù)組,可以通過reshape方法改變其數(shù)據(jù)維度。格式:np.reshape(a,newshape,order='C')213.1.4數(shù)組變換參數(shù)名稱說明a需要處理的數(shù)據(jù)。newshape新維度——整數(shù)或整數(shù)元組,例:3.1NumPy多維數(shù)組1.數(shù)組重塑

reshape的參數(shù)中的其中一個可以設(shè)置為-1,表示數(shù)組的維度可以通過數(shù)據(jù)本身來推斷。223.1.4數(shù)組變換3.1NumPy多維數(shù)組1.數(shù)組重塑與reshape相反的方法是數(shù)據(jù)散開(ravel)或數(shù)據(jù)扁平化(flatten)。233.1.4數(shù)組變換3.1NumPy多維數(shù)組2.數(shù)組合并

hstack函數(shù):實現(xiàn)橫向合并

vstack函數(shù):實現(xiàn)縱向組合是利用vstack將數(shù)組縱向合并;

concatenate函數(shù):可以實現(xiàn)數(shù)組的橫向或縱向合并,參數(shù)axis=1時進行橫向合并,axis=0時進行縱向合并。243.1.4數(shù)組變換arr1=np.arange(6).reshape(3,2)arr2=arr1*2arr3=np.hstack((arr1,arr2))print(arr3)[[0102][2346][45810]]3.1NumPy多維數(shù)組concatenate函數(shù)可以實現(xiàn)數(shù)組的橫向或縱向合并,其中的參數(shù)axis=1時進行橫向合并,axis=0時進行縱向合并。concatenate函數(shù)合并數(shù)組。In[20]:arr1=np.arange(6).reshape(3,2)arr2=arr1*2print('橫向組合為:',np.concatenate((arr1,arr2),axis=1))print('縱向組合為:',np.concatenate((arr1,arr2),axis=0))Out[20]:橫向組合為:[[0102][2346][45810]]縱向組合為:[[01][23][45][02][46][810]]3.1NumPy多維數(shù)組3.數(shù)組分割

與數(shù)組合并相反,hsplit函數(shù)、vsplit函數(shù)和split函數(shù)分別實現(xiàn)數(shù)組的橫向、縱向和指定方向的分割。263.1.4數(shù)組變換arr=np.arange(16).reshape(4,4)print('橫向分割為:\n',np.hsplit(arr,2))print('縱向組合為:\n',np.vsplit(arr,2))橫向分割為:[array([[0,1],[4,5],[8,9],[12,13]]),array([[2,3],[6,7],[10,11],[14,15]])]縱向組合為:[array([[0,1,2,3],[4,5,6,7]]),array([[8,9,10,11],

[12,13,14,15]])]split在參數(shù)axis=1時實現(xiàn)數(shù)組的橫向分割,axis=0時則進行縱向分割。3.1NumPy多維數(shù)組273.1.4數(shù)組變換4.數(shù)組轉(zhuǎn)置和軸對換

數(shù)組轉(zhuǎn)置是數(shù)組重塑的一種特殊形式,可以通過transpose方法進行轉(zhuǎn)置。除了使用transpose外,可以直接利用數(shù)組的T屬性進行數(shù)組轉(zhuǎn)置。3.1NumPy多維數(shù)組數(shù)組的軸對換。In[24]:arr=np.arange(6).reshape(3,2)print(arr)print(arr.swapaxes(0,1))Out[24]:[[01][23][45]][[024][135]]練習(xí)數(shù)組變換與數(shù)組合并練習(xí)1.創(chuàng)建一個元素為從10到49的ndarray對象D1;2.將D1的所有元素位置反轉(zhuǎn);3.使用np.random.random創(chuàng)建一個10*10的ndarray對象,并打印出最大最小元素;4.創(chuàng)建一個10*10的ndarray對象,且矩陣邊界全為1,里面全為0;5.創(chuàng)建一個范圍在(0,1)之間的長度為12的等差數(shù)列;6.創(chuàng)建一個長度為10的隨機數(shù)組并排序;7.給定一個4維矩陣,如何得到最后兩維的和?8.如何將數(shù)組a=np.arange(10).reshape(2,-1)和數(shù)組b=np.repeat(1,

10).reshape(2,-1)水平堆疊?293.2數(shù)組的索引和切片一維數(shù)組的索引類似Python中的列表。303.2.1一維數(shù)組的索引和切片3.2數(shù)組的索引和切片數(shù)組的切片返回的是原始數(shù)組的視圖,不會產(chǎn)生新的數(shù)據(jù),如果需要的并非視圖而是要復(fù)制數(shù)據(jù),則可以通過copy方法實現(xiàn)。313.2.1一維數(shù)組的索引和切片In[26]:arr1=arr[-4:-1].copy()print(arr)print(arr1)Out[26]:[0123456789][678]3.2數(shù)組的索引和切片對于多維數(shù)組,它的每一個維度都有一個索引,各個維度的索引之間用逗號分隔。也可以使用整數(shù)函數(shù)和布爾值索引訪問多維數(shù)組。323.2.2多維數(shù)組的索引和切片arr=np.arange(12).reshape(3,4)print(arr)print(arr[0,1:3])#索引第0行中第1列到第2列的元素print(arr[:,2])#索引第2列元素print(arr[:1,:1])#第0行第0列元素3.2數(shù)組的索引和切片333.2.2多維數(shù)組的索引和切片In[28]:arr=np.arange(12).reshape(3,4)#從兩個序列的對應(yīng)位置取出兩個整數(shù)來組成下標:arr[0,1],arr[1,3]print(arr)print('索引結(jié)果1:',arr[(0,1),(1,3)])#索引第1、2行中第0、2、3列的元素print('索引結(jié)果2:',arr[1:2,(0,2,3)])mask=np.array([1,0,1],dtype=np.bool)#mask是一個布爾數(shù)組,它索引第0,2行中第1列元素print('索引結(jié)果3:',arr[mask,1])Out[28]:[[0123][4567][891011]]索引結(jié)果1:[17]索引結(jié)果2:[[467]]索引結(jié)果3:[19]3.2數(shù)組的索引和切片arr=np.arange(12).reshape(3,4)arr[(0,1),(1,3)]對應(yīng)的元素是

1,7arr[1:2,(0,2,3)]對應(yīng)的元素是4,6,7mask=np.array([1,0,1],dtype=np.bool)arr[mask,1]對應(yīng)的元素是343.3數(shù)組的運算353.3.1數(shù)組和標量間的運算數(shù)組之所以很強大是因為不需要通過循環(huán)就可以完成批量計算.3.3數(shù)組的運算363.3.2ufunc函數(shù)ufunc函數(shù)全稱為通用函數(shù),是一種能夠?qū)?shù)組中的所有元素進行操作的函數(shù)。對一個數(shù)組進行重復(fù)運算時,使用ufunc函數(shù)比使用math庫中的函數(shù)效率要高很多。3.3數(shù)組的運算1.常用的ufunc函數(shù)運算

常用的ufunc函數(shù)運算有四則運算、比較運算和邏輯運算。1)四則運算:

加(+)、減(-)、乘(*)、除(/)、冪(**)。數(shù)組間的四則運算表示對每個數(shù)組中的元素分別進行四則運算,所以形狀必須相同。2)比較運算:>、<、==、>=、<=、!=。比較運算返回的結(jié)果是一個布爾數(shù)組,每個元素為每個數(shù)組對應(yīng)元素的比較結(jié)果。373.3數(shù)組的運算1.常用的ufunc函數(shù)運算3)邏輯運算:np.any函數(shù)表示邏輯“or”,np.all函數(shù)表示邏輯“and”,運算結(jié)果返回布爾值。383.3數(shù)組的運算1.常用的ufunc函數(shù)運算39In[31]:x=np.array([1,3,6])y=np.array([2,3,4])print('比較結(jié)果(<):',x<y)print('比較結(jié)果(>):',x>y)print('比較結(jié)果(==):',x==y)print('比較結(jié)果(>=):',x>=y)print('比較結(jié)果(!=):',x!=y)Out[31]:比較結(jié)果(<):[TrueFalseFalse]比較結(jié)果(>):[FalseFalseTrue]比較結(jié)果(==):[FalseTrueFalse]比較結(jié)果(>=):[FalseTrueTrue]比較結(jié)果(!=):[TrueFalseTrue]【例3-31】數(shù)組的比較運算。3.3數(shù)組的運算2.ufunc函數(shù)的廣播機制

廣播(broadcasting)是指不同形狀的數(shù)組之間執(zhí)行算術(shù)運算的方式。需要遵循4個原則:1)讓所有輸入數(shù)組都向其中shape最長的數(shù)組看齊,shape中不足的部分都通過在左邊加1補齊。2)如果兩個數(shù)組的形狀在任何一個維度上都不匹配,那么數(shù)組的形狀會沿著維度為1的維度進行擴展,以匹配另一個數(shù)組的形狀。403.3數(shù)組的運算2.ufunc函數(shù)的廣播機制廣播(broadcasting)是指不同形狀的數(shù)組之間執(zhí)行算術(shù)運算的方式。需要遵循4個原則:3)輸出數(shù)組的shape是輸入數(shù)組shape的各個軸上的最大值。4)如果兩個數(shù)組的形狀在任何一個維度上都不匹配,并且沒有任何一個維度等于1,則引發(fā)異常。413.3數(shù)組的運算2.ufunc函數(shù)的廣播機制

42【例3-32】ufunc函數(shù)的廣播3.3數(shù)組的運算433.3.3條件邏輯運算在NumPy中可以利用基本的邏輯運算就可以實現(xiàn)數(shù)組的條件運算。In[33]:arr1=np.array([1,3,5,7])arr2=np.array([2,4,6,8])cond=np.array([True,False,True,False])result=[(xifcelsey)forx,y,cinzip(arr1,arr2,cond)]resultOut[33]:[1,4,5,8]這種方法對大規(guī)模數(shù)組處理效率不高,也無法用于多維數(shù)組。NumPy提供的where方法可以克服這些問題。3.3數(shù)組的運算443.3.3條件邏輯運算where的用法:np.where(condition,x,y)滿足條件(condition),輸出x,不滿足則輸出y。In[34]:np.where([[True,False],[True,True]],[[1,2],[3,4]],[[9,8],[7,6]])Out[34]:array([[1,8],

[3,4]])條件為[[True,False],[True,False]],分別對應(yīng)最后輸出結(jié)果的四個值,運算時第一個值從[1,9]中選,因為條件為True,所以是選1。第二個值從[2,8]中選,因為條件為False,所以選8,后面以此類推。3.3數(shù)組的運算453.3.3條件邏輯運算In[35]:w=np.array([2,5,6,3,10])np.where(w>4)Out[35]:(array([1,2,4],dtype=int64),)【例3-35】where中只有condition參數(shù)。where中若只有條件

(condition),沒有x和y,則輸出滿足條件元素的索引。通常原數(shù)組有多少維,輸出的tuple中就包含幾個數(shù)組,分別對應(yīng)符合條件元素的各維坐標。

練習(xí)如何從數(shù)組np.arange(15)中提取5到10之間的所有數(shù)字?

如何交換數(shù)組np.arange(9).reshape(3,3)中的第1列和第2列?如何交換數(shù)組np.arange(9).reshape(3,3)中的第1行和第2行?如何獲取數(shù)組a=np.array([1,2,3,2,3,4,3,4,5,6])和數(shù)組b=np.array([7,2,10,2,7,4,9,4,9,8])之間的共同元素?如何查找數(shù)組np.array([1,2,3,2,3,4,3,4,5,6])中的唯一值的數(shù)量?如何找到二維數(shù)組np.arange(9).reshape(3,3)每一行中的最大值?如何計算數(shù)組a=np.array([1,2,3,2,3,4,3,4,5,6])和數(shù)組b=np.array([7,2,10,2,7,4,9,4,9,8])之間的歐式距離?如何知道數(shù)組np.array([7,2,10,2,7,4,9,4,9,8])中的第二大值是多少?如何知道數(shù)組np.array([7,2,10,2,7,2,4,9,4,9,8])中出現(xiàn)頻率最高的值是什么?463.4數(shù)組讀寫NumPy提供了多種文件操作函數(shù)存取數(shù)組內(nèi)容。文件存取的格式分為兩類:二進制和文本。而二進制格式的文件又分為NumPy專用的格式化二進制類型和無格式類型。NumPy中讀寫二進制文件的方法有:1.np.load(“文件名.npy")是從二進制文件中讀取數(shù)據(jù);2.np.save(“文件名[.npy]",arr)是以二進制格式保存數(shù)據(jù)。473.4.1讀寫二進制文件3.4數(shù)組讀寫483.4.1讀寫二進制文件【例3-36】數(shù)組的讀寫。a=np.arange(1,13).reshape(3,4)print(a)np.save('arr.npy',a)#

np.save("arr",a)c=np.load('arr.npy')print(c)3.4數(shù)組讀寫493.4.1讀寫二進制文件【例3-37】多個數(shù)組保存。a=np.array([[1,2,3],[4,5,6]])b=np.arange(0,1.0,0.1)c=np.sin(b)#長度為10print(c)np.savez('result.npz',a,b,sin_array=c)r=np.load('result.npz')r['arr_0']#數(shù)組a3.4數(shù)組讀寫

NumPy中讀寫文本文件的主要方法有:1.np.loadtxt("../tmp/arr.txt",delimiter=",")把文件加載到一個二維數(shù)組中;2.np.savetxt("../tmp/arr.txt",arr,fmt="%d",delimiter=",")是將數(shù)組寫到某種分隔符隔開的文本文件中;3.np.genfromtxt("../tmp/arr.txt",delimiter=",")是結(jié)構(gòu)化數(shù)組和缺失數(shù)據(jù)。503.4.2讀寫文本文件3.4數(shù)組讀寫讀寫文本文件。In[38]:a=np.arange(0,12,0.5).reshape(4,-1)np.savetxt("a1-out.txt",a)#缺省按照'%.18e'格式保存數(shù)值np.loadtxt("a1-out.txt")np.savetxt("a2-out.txt",a,fmt="%d",delimiter=",")#改為保存為整數(shù),以逗號分隔np.loadtxt("a2-out.txt",delimiter=",")#讀入的時候也需要指定逗號分隔Out[38]:array([[0.,0.,1.,1.,2.,2.],[3.,3.,4.,4.,5.,5.],[6.,6.,7.,7.,8.,8.],[9.,9.,10.,10.,11.,11.]])3.4數(shù)組讀寫np.loadtxt(fname,dtype=,comments=’#’,delimiter=None,converters=None,skiprows=0,usecols=None,unpack=False,ndmin=0,encoding=‘bytes’)523.4.2讀取CSV文件參數(shù)使用說明fnamestr,讀取的CSV文件名delimiterstr,數(shù)據(jù)的分割符usecolstuple(元組),執(zhí)行加載數(shù)據(jù)文件中的哪些列unpackbool,是否將加載的數(shù)據(jù)拆分為多個組,True表示拆,F(xiàn)alse不拆skipprowsint,跳過多少行,一般用于跳過前幾行的描述性文字encodingbytes,編碼格式3.5NumPy中的數(shù)據(jù)統(tǒng)計與分析Sort函數(shù)對數(shù)據(jù)直接進行排序,調(diào)用改變原始數(shù)組,無返回值。格式:numpy.sort(a,axis,kind,order)主要參數(shù)及其說明見表3-5。533.5.1排序參數(shù)使用說明a要排序的數(shù)組kind排序算法,默認為“quicksort”order排序的字段名,可指定字段排序,默認為Noneaxis使得sort函數(shù)可以沿著指定軸對數(shù)據(jù)集進行排序。axis=1為沿橫軸排序;axis=0為沿縱軸排序;axis=None,將數(shù)組平坦化之后進行排序3.5NumPy中的數(shù)據(jù)統(tǒng)計與分析

np.argsort函數(shù)和np.lexsort函數(shù)根據(jù)一個或多個鍵值對數(shù)據(jù)集進行排序。

np.argsort():返回的是數(shù)組值從小到大的索引值;

np.lexsort():返回值是按照最后一個傳入數(shù)據(jù)排序的結(jié)果。543.5.1排序In[39]:arr=np.array([7,9,5,2,9,4,3,1,4,3])print('原數(shù)組:',arr)arr.sort()print('排序后:',arr)Out[39]:原數(shù)組:[7952943143]排序后:[1233445799]3.5NumPy中的數(shù)據(jù)統(tǒng)計與分析

【例3-40】帶軸向參數(shù)的sort排序553.5.1排序In[40]:arr=np.array([[4,2,9,5],[6,4,8,3],[1,6,2,4]])print('原數(shù)組:\n',arr)arr.sort(axis=1)#沿橫向排序print('橫向排序后:\n',arr)Out[40]:原數(shù)組:[[4295][6483][1624]]橫向排序后:[[2459][3468][1246]]使用argsort和lexsort函數(shù),可以在給定一個或多個鍵時,得到一個由整數(shù)構(gòu)成的索引數(shù)組,索引值表示數(shù)據(jù)在新的序列中的位置。3.5NumPy中的數(shù)據(jù)統(tǒng)計與分析

【例3-41】使用argsort函數(shù)進行排序563.5.1排序In[41]:arr=np.array([7,9,5,2,9,4,3,1,4,3])print('原數(shù)組:',arr)print('排序后:',arr.argsort())#返回值為數(shù)組排序后的下標排列print('顯示較大的5個數(shù):',arr[arr.argsort()][-5:])Out[41]:原數(shù)組:[7952943143]排序后:[7369582014]顯示較大的5個數(shù):[45799]3.5NumPy中的數(shù)據(jù)統(tǒng)計與分析

【例3-42】使用lexsort排序573.5.1排序In[42]:name=[‘小明’,‘小王’,‘小張’,‘小李’,‘小劉’]age=[25,24,22,21,23]ind=np.lexsort((name,age))print('ind:',ind)tmp=[(neme[i],age[i])foriinind]print('tmp:',tmp)Out[42]:ind:[32410]tmp:[(‘小李’,21),(‘小張’,22),(‘小劉’,23),(‘小王’,24),(‘小明’,25)]3.5NumPy中的數(shù)據(jù)統(tǒng)計與分析

在NumPy中,對于一維數(shù)組或者列表,unique函數(shù)去除其中重復(fù)的元素,并按元素由大到小返回一個新的元組或者列表。583.5.2重復(fù)數(shù)據(jù)與去重【例3-43】數(shù)組內(nèi)數(shù)據(jù)去重。In[43]:names=np.array(['紅色','藍色','黃色','白色','紅色'])print('原數(shù)組:',names)print('去重后的數(shù)組:',np.unique(names))Out[43]:原數(shù)組:['紅色'

溫馨提示

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

評論

0/150

提交評論