Python大數(shù)據(jù)分析 教案 教學(xué)設(shè)計(jì) 第2章-數(shù)值計(jì)算_第1頁
Python大數(shù)據(jù)分析 教案 教學(xué)設(shè)計(jì) 第2章-數(shù)值計(jì)算_第2頁
Python大數(shù)據(jù)分析 教案 教學(xué)設(shè)計(jì) 第2章-數(shù)值計(jì)算_第3頁
Python大數(shù)據(jù)分析 教案 教學(xué)設(shè)計(jì) 第2章-數(shù)值計(jì)算_第4頁
Python大數(shù)據(jù)分析 教案 教學(xué)設(shè)計(jì) 第2章-數(shù)值計(jì)算_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

授課時(shí)間第2、3、4次課,第周星期第節(jié)課時(shí)6授課方式理論課√討論課□習(xí)題課□實(shí)驗(yàn)課□上機(jī)課□技能課□其他□授課題目第二章數(shù)值計(jì)算目的與要求1.了解NumPy數(shù)組的概念,掌握NumPy數(shù)組的創(chuàng)建方法、屬性和數(shù)據(jù)類型。2.熟悉數(shù)組的操作,掌握常用數(shù)組操作方法的使用。3.熟悉數(shù)組索引和切片的概念,掌握數(shù)組切片和索引方法。4.熟悉數(shù)組運(yùn)算,掌握數(shù)組各類運(yùn)算方法的使用。5.掌握NumPy的線性代數(shù)運(yùn)算函數(shù)。6.熟悉數(shù)組的存取操作方法。7.熟悉數(shù)組的視圖與副本重點(diǎn)與難點(diǎn)重點(diǎn):NumPy數(shù)組創(chuàng)建、數(shù)組索引和切片、數(shù)組運(yùn)算。難點(diǎn):NumPy線性代數(shù)函數(shù)。教學(xué)基本內(nèi)容方法及手段NumPy是用于科學(xué)計(jì)算的一個(gè)開源的Python程序庫,它為Python提供了高性能數(shù)組與矩陣運(yùn)算處理能力,為數(shù)據(jù)分析提供了數(shù)據(jù)處理的基礎(chǔ)功能。2.1NumPy多維數(shù)組NumPy提供了一個(gè)名為ndarray的多維數(shù)組對象,該數(shù)組元素具有固定大小,即NumPy數(shù)組元素是同質(zhì)的,只能存放同一種數(shù)據(jù)類型的對象,因此能夠確定存儲數(shù)組所需空間的大小,能夠運(yùn)用向量化運(yùn)算來處理整個(gè)數(shù)組,具有較高的運(yùn)算效率。2.1.1數(shù)組創(chuàng)建可以通過多種方式創(chuàng)建NumPy數(shù)組。1.通過array函數(shù)創(chuàng)建ndarray數(shù)組NumPy的array函數(shù)可以創(chuàng)建ndarray數(shù)組,對于多維數(shù)組的創(chuàng)建,使用嵌套序列數(shù)據(jù)即可完成。函數(shù)array可以將Python的列表、元組、數(shù)組或其他序列類型作為參數(shù)創(chuàng)建ndarray數(shù)組。[示例2-1]一維列表作為array參數(shù)In[]:importnumpyasnpa1=np.array([1,2,3,4,5,6])print(a1)Out[]:[123456][示例2-2]二維列表作為array參數(shù)In[]:importnumpyasnpa2=np.array([[1,2,3],[4,5,6]])print(a2)Out[]:[[123][456]][示例2-3]字符串作為array參數(shù)In[]:importnumpyasnpa3=np.array('abcdefg')a3Out[]:array('abcdefg',dtype='<U7')[示例2-4]元組作為array參數(shù)In[]:importnumpyasnpa4=np.array((1,2,3))a4Out[]:array([1,2,3])[示例2-5]字典作為array參數(shù)In[]:importnumpyasnpa5=np.array({'zhang':12,'dd':45})a5Out[]:array({'zhang':12,'dd':45},dtype=object)2.創(chuàng)建特殊數(shù)組NumPy提供了創(chuàng)建特殊數(shù)組的函數(shù),如表2-1所示。表2-1特殊數(shù)組創(chuàng)建函數(shù)函數(shù)使用說明ones創(chuàng)建指定長度或形狀的全1數(shù)組ones_like以另一個(gè)數(shù)組為參考,根據(jù)其形狀和dtype創(chuàng)建全1數(shù)組zeros、zeros_like類似于ones、ones_like,創(chuàng)建全0數(shù)組empty、empty_like同上,創(chuàng)建沒有具體值的數(shù)eye、identity創(chuàng)建正方形的N×N單位矩陣[示例2-6]創(chuàng)建特殊數(shù)組In[]:importnumpyasnpb1=np.empty((2,3))print('b1=')print(b1)b2=np.zeros((3,5))print('b2=')print(b2)b3=np.ones((4,2))print('b3=')print(b3)b4=np.eye(3)print('b4=')print(b4)b5=np.ones_like(b1)print('b5=')print(b5)3.從數(shù)值范圍創(chuàng)建數(shù)組從數(shù)值范圍創(chuàng)建數(shù)組的NumPy函數(shù)有三個(gè):arange、linspace和logspace函數(shù)。(1)arange函數(shù)函數(shù)arange根據(jù)start與stop指定的范圍以及step設(shè)定的步長,生成一個(gè)ndarray對象,函數(shù)格式如下所示。numpy.arange(start,stop,step,dtype)其中參數(shù)如表2-2所示。表2-2arange函數(shù)參數(shù)參數(shù)描述start起始值,默認(rèn)為0stop終止值(不包含)step步長,默認(rèn)為1dtype返回ndarray的數(shù)據(jù)類型,如果沒有提供,則會使用輸入數(shù)據(jù)的類型(2)linspacelinspace函數(shù)用于創(chuàng)建一個(gè)一維數(shù)組,數(shù)組是一個(gè)等差數(shù)列構(gòu)成的,其格式如下。np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)其中函數(shù)參數(shù)如2-3表所示。表2-3linspace函數(shù)參數(shù)參數(shù)描述start序列的起始值stop序列的終止值,如果endpoint為true,該值包含于數(shù)列中num要生成的等步長的樣本數(shù)量,默認(rèn)為50endpoint該值為

ture

時(shí),數(shù)列中包含stop值,反之不包含,默認(rèn)是True。retstep如果為True時(shí),生成的數(shù)組中會顯示間距,反之不顯示。dtypendarray

的數(shù)據(jù)類型(3)logspace函數(shù)logspace函數(shù)用于創(chuàng)建一個(gè)對數(shù)運(yùn)算的等比數(shù)列,其格式如下所示。np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)函數(shù)參數(shù)如表2-4所示。表2-4logspace函數(shù)參數(shù)參數(shù)描述start序列的起始值stop序列的終止值為。如果endpoint為true,該值包含于數(shù)列中num要生成的等步長的樣本數(shù)量,默認(rèn)為50endpoint該值為

ture

時(shí),數(shù)列中中包含stop值,反之不包含,默認(rèn)是Truebase對數(shù)log的底數(shù)dtypendarray

的數(shù)據(jù)類型[示例2-7]從數(shù)值范圍創(chuàng)建數(shù)組In[]:importnumpyasnpc1=np.arange(10)c2=np.linspace(1,10,10)c3=np.logspace(10,100,10)print('c1=',c1)print('c2=',c2)print('c3=',c3)4.使用asarray函數(shù)創(chuàng)建NumPy數(shù)組函數(shù)asarray把Python的列表、元組等轉(zhuǎn)換為NumPy數(shù)組,其格式如下。numpy.asarray(a,dtype=None,order=None)函數(shù)參數(shù)如表2-5所示。表2-5asarray函數(shù)參數(shù)參數(shù)描述a任意形式的輸入?yún)?shù),可以是列表、列表的元組、元組、元組的元組、元組的列表、多維數(shù)組dtype數(shù)據(jù)類型,可選order可選,有"C"和"F"兩個(gè)選項(xiàng),分別代

行優(yōu)先和列優(yōu)先[示例2-8]asarray函數(shù)In[]:importnumpyasnpd1=[1,3,5,7,9]d2=np.asarray(d1)print(d2)Out[]:[13579]當(dāng)然我們也可以把NumPy數(shù)組通過tolist函數(shù)轉(zhuǎn)換成Python列表。5.隨機(jī)數(shù)數(shù)組通過NumPy的隨機(jī)數(shù)函數(shù)可以創(chuàng)建隨機(jī)數(shù)數(shù)組,在numpy.random模塊中,提供了多種隨機(jī)生成函數(shù)。如表2-6所示。表2-6隨機(jī)數(shù)函數(shù)函數(shù)使用說明rand產(chǎn)生均勻分布的樣本值randint給定范圍內(nèi)取隨機(jī)整數(shù)randn產(chǎn)生正態(tài)分布的樣本值seed隨機(jī)數(shù)種子permutation對一個(gè)序列隨機(jī)排序,不改變原數(shù)組shuffle對一個(gè)序列隨機(jī)排序,改變原數(shù)組Uniform(low,high,size)產(chǎn)生具有均勻分布的數(shù)組,low表示起始值,high表示結(jié)束值,size表示形狀normal(loc,scale,size)產(chǎn)生具有正態(tài)分布的數(shù)組,loc表示均值,scale表示標(biāo)準(zhǔn)差poisson(lam,size)產(chǎn)生具有泊松分布的數(shù)組,lam表示隨機(jī)事件發(fā)生率(1)rand函數(shù)函數(shù)rand產(chǎn)生一個(gè)給定形狀的數(shù)組,數(shù)組中的值服從[0,1)之間的均勻分布,其格式如下。numpy.random.rand(d0,d1,...,dn)參數(shù)d0,d1,...,dn為int型,可選。如果沒有參數(shù)則返回一個(gè)float型的隨機(jī)數(shù),該隨機(jī)數(shù)服從[0,1)之間的均勻分布。其返回值是一個(gè)ndarray對象或者一個(gè)float型的值。[示例2-9]rand函數(shù)In[]:importnumpyasnpa=np.random.rand(2,4)print(a)Out[]:[[0.188212090.768048560.316783370.67669764][0.997522760.746654830.454623160.26944658]](2)uniform函數(shù)函數(shù)uniform返回一個(gè)在區(qū)間[low,high)中均勻分布的數(shù)組,其格式如下。uniform(low=0.0,high=1.0,size=None)參數(shù)low,high是float型或者float型的類數(shù)組對象。指定抽樣區(qū)間為[low,high),low的默認(rèn)值為0.0,hign的默認(rèn)值為1.0;size是int型或int型元組。指定形狀,如果不提供size,則返回一個(gè)服從該分布的隨機(jī)數(shù)。[示例2-10]uniform函數(shù)In[]:importnumpyasnpa=np.random.uniform(size=(2,4))b=np.random.uniform(3,5,(2,4))print(a)print(b)(3)randn函數(shù)函數(shù)randn返回一個(gè)指定形狀的數(shù)組,數(shù)組中的值服從標(biāo)準(zhǔn)正態(tài)分布(均值為0,方差為1),其格式如下。numpy.random.randn(d0,d1,...,dn)參數(shù):d0,d,...,dn:int,可選。如果沒有參數(shù),則返回一個(gè)服從標(biāo)準(zhǔn)正態(tài)分布的float型隨機(jī)數(shù)。返回值:ndarray對象或者float。[示例2-11]randn函數(shù)In[]:importnumpyasnpa=np.random.randn(2,4)print(a)(4)normal函數(shù)函數(shù)normal生成一個(gè)由size指定形狀的數(shù)組,數(shù)組中的值服從μ=loc,σ=scale的正態(tài)分布,其格式如下。numpy.random.normal(loc=0.0,scale=1.0,size=None)函數(shù)參數(shù)如下所述。loc:float型或者float型的類數(shù)組對象,指定均值

。scale:float型或者float型的類數(shù)組對象,指定標(biāo)準(zhǔn)差。size:int型或者int型的元組,指定了數(shù)組的形狀。如果不提供size,且loc和scale為標(biāo)量(不是類數(shù)組對象),則返回一個(gè)服從該分布的隨機(jī)數(shù)。輸出:ndarray對象或者一個(gè)標(biāo)量。[示例2-12]normal函數(shù)In[]:importnumpyasnpa=np.random.normal(size=(2,4))print(a)(5)randint函數(shù)函數(shù)randint生成一個(gè)在區(qū)間[low,high)中離散均勻抽樣的數(shù)組,其格式如下。numpy.random.randint(low,high=None,size=None,dtype='l')函數(shù)參數(shù)如下所示。low,high:int型,指定抽樣區(qū)間[low,high)size:int型或int型的元組,指定形狀dypte:可選參數(shù),指定數(shù)據(jù)類型,比如int,int64等,默認(rèn)是返回值:如果指定了size,則返回一個(gè)int型的ndarray對象,否則返回一個(gè)服從該分布的int型隨機(jī)數(shù)。[示例2-13]randint函數(shù)In[]:importnumpyasnpa=np.random.randint(1,10,size=(2,4))print(a)Out[]:[[5187][1542]](6)numpy.random.random(size=None)函數(shù)random生成[0,1)之間均勻抽樣的數(shù)組,其格式如下。numpy.random.random(size=None)參數(shù)size:int型或int型的元組,如果不提供則返回一個(gè)服從該分布的隨機(jī)數(shù)。返回值:float型或者float型的ndarray對象。[示例2-13]random函數(shù)In

[]:importnumpyasnpa=np.random.random((2,4))print(a)2.1.2數(shù)組對象屬性ndarray對象具有多個(gè)十分有用的屬性,如表2-7所示。表2-7ndarray對象屬性屬性使用說明ndim秩,即數(shù)據(jù)軸的個(gè)數(shù)shape數(shù)組的維度size元素的總個(gè)數(shù)dtype數(shù)據(jù)類型itemsize數(shù)組中每個(gè)元素的字節(jié)大小nbytes存儲整個(gè)數(shù)組所需的字節(jié)數(shù)量,是itemsize屬性值和size屬性值之積T數(shù)組的轉(zhuǎn)置flat返回一個(gè)numpy.flatiter對象,可以使用flat的迭代器來遍歷數(shù)組屬性T。如果數(shù)組的秩(rank)小于2,那么所得只是一個(gè)數(shù)組的視圖。屬性flat提供了一種遍歷方式,同時(shí)還可以給flat屬性賦值。不過賦值會覆蓋整個(gè)數(shù)組內(nèi)所有元素的值。[示例2-14]random函數(shù)In

[]:importnumpyasnpa=np.array([np.arange(3),np.linspace(3,5,3)])print(np.arange(5).T)#一維數(shù)組的轉(zhuǎn)置為自身視圖print('a=')print(a)print(a.ndim,a.shape,a.size,a.dtype,a.itemsize,a.nbytes)print('數(shù)組轉(zhuǎn)置')print(a.T)foritemina.flat:print(item,end=",")2.1.3數(shù)組數(shù)據(jù)類型Python雖然支持整型、浮點(diǎn)型和復(fù)數(shù)型,但對于科學(xué)計(jì)算來說,仍然需要更多的數(shù)據(jù)類型來滿足在精度和存儲大小方面的各種不同要求。NumPy提供了豐富的數(shù)據(jù)類型,如表2-8所示。表2-8數(shù)據(jù)類型類型說明bool布爾型(值為True或False),占用1bitinti其長度取決于平臺的整數(shù)(通常為int32或者int64)int8字節(jié)類型(取值范圍從-128~127)int16整型(取值范圍32768~32767)int32整型(取值范圍為-231~231-1)int64整型(取值范圍為-263~263-1)uint8無符號整型(取值范圍為0~255)uint16無符號整型(取值范圍為0~65535)uint32無符號整型(取值范圍為0~232-1)uint64無符號整型()(取值范圍為0~2641)float16半精度浮點(diǎn)型:符號占用1bit,指數(shù)占用5bit,尾數(shù)占用10bitfloat32單精度浮點(diǎn)型:符號占用1bit,指數(shù)占用8bit,尾數(shù)占用23bitfloat64位或者float雙精度浮點(diǎn)型:符號占用1bit,指數(shù)占用11bit,尾數(shù)占用52bitcomplex64復(fù)數(shù)類型,由兩個(gè)32位浮點(diǎn)數(shù)(實(shí)部和虛部)表示complex128或者complex復(fù)數(shù)類型,由兩個(gè)64位浮點(diǎn)數(shù)(實(shí)部和虛部)表示備注:數(shù)據(jù)類型的名稱以數(shù)字結(jié)尾,表示該類型的變量所占用的二進(jìn)制位數(shù)。1.dtype指定數(shù)據(jù)類型創(chuàng)建數(shù)組時(shí),如果沒有指定數(shù)據(jù)類型,NumPy會給新建的數(shù)組一個(gè)合適的數(shù)據(jù)類型。當(dāng)然也可以給創(chuàng)建的數(shù)組明確指定數(shù)據(jù)類型,指定數(shù)據(jù)類型是通過參數(shù)dtype實(shí)現(xiàn)的。2.astype轉(zhuǎn)換數(shù)據(jù)類型astype()函數(shù)可以把數(shù)組元素轉(zhuǎn)換成指定類型。注意:(1)指定類型有兩種寫法。以float64為例:np.float64和“float64”,這兩種方式效果相同。(2)將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)時(shí)元素的小數(shù)部分被截?cái)?,而不是四舍五入。?)數(shù)值型的字符串可以通過astype方法將其轉(zhuǎn)換為數(shù)值類型,但如果字符串中有非數(shù)值型字符進(jìn)行轉(zhuǎn)換就會報(bào)錯(cuò)。(4)astype方法會創(chuàng)建一個(gè)新的數(shù)組,并不會改變原有數(shù)組的數(shù)據(jù)類型。[示例2-16]astype函數(shù)In

[]:importnumpyasnpa=np.array([[1.1,2.2],[3.3,3.4]],dtype=np.float)b=a.astype()print('a=',a)print('b=',b)c=np.arange(5,dtype=8)print('c.dtype=',c.dtype)print('數(shù)據(jù)類型轉(zhuǎn)換后的dtype=',c.astype(np.float).dtype)print('c的數(shù)據(jù)類型沒有改變,c.dtype=',c.dtype)2.2數(shù)組操作NumPy中包含了一些函數(shù)用于操作數(shù)組,大致分為六類:修改數(shù)組形狀、翻轉(zhuǎn)數(shù)組、修改數(shù)組維度、連接數(shù)組、分割數(shù)組、數(shù)組元素的添加與刪除。2.2.1修改數(shù)組形狀修改數(shù)組形狀的函數(shù)如表2-9所示。表2-9修改數(shù)組形狀函數(shù)函數(shù)描述reshap

不改變數(shù)據(jù)的條件下修改形狀flatten返回一份數(shù)組拷貝,對拷貝所做的修改不會影響原始數(shù)組ravel返回展開數(shù)組1.reshape函數(shù)函數(shù)reshape在不改變數(shù)據(jù)的條件下修改形狀,其格式如下。numpy.reshape(arr,newshape,order='C')其函數(shù)參數(shù)如表2-10所示。表2-10reshape函數(shù)參數(shù)參數(shù)描述arr要修改形狀的數(shù)組newshape新形狀參數(shù),為整數(shù)或者整數(shù)數(shù)組,新的形狀應(yīng)當(dāng)兼容原有形狀order'C'按行,'F'按列,

A'原順序,'k'元素在內(nèi)存中的出現(xiàn)順序。2.flatten函數(shù)函數(shù)flatten返回一份數(shù)組拷貝,對拷貝所做的修改不會影響原始數(shù)組,其格式如下所示。ndarray.flatten(order='C')函數(shù)參數(shù)order與reshape函數(shù)的參數(shù)order相同。3.ravel函數(shù)函數(shù)ravel展平數(shù)組元素,順序通常是“C風(fēng)格”,返回的是數(shù)組視圖,其函數(shù)格式如下所示。numpy.ravel(a,order='C')函數(shù)參數(shù)order與reshape函數(shù)的參數(shù)order相同。函數(shù)flatten與ravel的區(qū)別在于返回拷貝還是返回視圖,numpy.flatten()返回一份拷貝,對拷貝所做的修改不會影響原始數(shù)組,而numpy.ravel返回的是視圖,對視圖修改會影響原始數(shù)組。[示例2-17]修改數(shù)組形狀I(lǐng)n

[]:importnumpyasnpa=np.arange(12).reshape(2,6)b=a.reshape(3,4)print('reshape輸出')print(a)print(b)print('flatten輸出')c=a.flatten('F')c[0]=100print(c)print(a)#數(shù)組a[0,0]的值沒有被修改print('ravel輸出')d=a.ravel()d[0]=100print(d)print(a)#通過修改d[0]的值,修改了a[0,0]的值2.2.2翻轉(zhuǎn)數(shù)組數(shù)組翻轉(zhuǎn)函數(shù)如表2-11所示。表2-11翻轉(zhuǎn)數(shù)組函數(shù)函數(shù)描述transpose對換數(shù)組的維度swapaxes對換數(shù)組的兩個(gè)軸1.numpy.transpose函數(shù)用于對換數(shù)組的維度,格式如下所示。numpy.transpose(arr,axes)參數(shù)說明如下所示。arr:要操作的數(shù)組。axes:整數(shù)列表,對應(yīng)維度,通常所有維度都會對換。numpy.ndarray.T類似numpy.transpose。2.numpy.swapaxesnumpy.swapaxes函數(shù)用于交換數(shù)組的兩個(gè)軸,格式如下所示。numpy.swapaxes(arr,axis1,axis2)參數(shù)arr:輸入的數(shù)組。axis1:交換軸中的第一個(gè)軸的整數(shù)axis2:交換軸中的第二個(gè)軸的整數(shù)[示例2-18]翻轉(zhuǎn)數(shù)組In

[]:importnumpyasnpa=np.arange(6).reshape(2,3)b=a.transpose()c=np.transpose(a)print('transpose輸出')print('a=',a)print('b=',b)print('c=',c)d=np.swapaxes(a,0,1)#第1軸與第2軸數(shù)據(jù)交換print('swapaxes輸出')print('d=',d)2.2.3連接數(shù)組數(shù)組連接函數(shù)如表2-12所示。表2-12數(shù)組連接函數(shù)函數(shù)描述concatenate連接沿現(xiàn)有軸的數(shù)組序列stack沿著新的軸加入一系列數(shù)組。hstack水平堆疊序列中的數(shù)組(列方向)vstack豎直堆疊序列中的數(shù)組(行方向)1.numpy.concatenatenumpy.concatenate函數(shù)用于沿指定軸連接相同形狀的兩個(gè)或多個(gè)數(shù)組,格式如下所示。numpy.concatenate((a1,a2,...),axis)參數(shù)a1,a2,...:相同類型的數(shù)組。axis:沿著它連接數(shù)組的軸,默認(rèn)為0。2.numpy.stacknumpy.stack函數(shù)用于沿新軸連接數(shù)組序列,格式如下所示。numpy.stack(arrays,axis)參數(shù)arrays相同形狀的數(shù)組序列。axis:返回?cái)?shù)組中的軸,輸入數(shù)組沿著它來堆疊。3.numpy.hstacknumpy.hstack是numpy.stack函數(shù)的變體,它通過水平堆疊來生成數(shù)組。4.numpy.vstacknumpy.vstack是numpy.stack函數(shù)的變體,它通過垂直堆疊來生成數(shù)組。[示例2-19]連接數(shù)組In

[]:importnumpyasnp?a=np.array([[1,2],[3,4]])b=np.array([[11,12],[13,14]])c=np.concatenate((a,b))d=np.concatenate((a,b),1)e=np.stack(c,0)f=np.stack(c,1)g=np.hstack((a,b))h=np.vstack((a,b))print('a=',a)print('b=',b)print('c=',c)print('d=',d)print('e=',e)print('f=',f)print('g=',g)print('h=',h)2.2.4分割數(shù)組分割數(shù)組函數(shù)如表2-13所示。表2-13數(shù)組分割函數(shù)函數(shù)描述split將一個(gè)數(shù)組分割為多個(gè)子數(shù)組hsplit將一個(gè)數(shù)組水平分割為多個(gè)子數(shù)組(按列)vsplit將一個(gè)數(shù)組垂直分割為多個(gè)子數(shù)組(按行)1.numpy.splitnumpy.split函數(shù)沿特定的軸將數(shù)組分割為子數(shù)組,格式如下所示。numpy.split(ary,indices_or_sections,axis)參數(shù)ary:被分割的數(shù)組。indices_or_sections:如果是一個(gè)整數(shù),就用該數(shù)平均切分,如果是一個(gè)數(shù)組,為沿軸切分的位置(左開右閉)。axis:沿著哪個(gè)維度進(jìn)行切向,默認(rèn)為0,橫向切分。為1時(shí),縱向切分。2.numpy.hsplitnumpy.hsplit函數(shù)用于水平分割數(shù)組,通過指定要返回的相同形狀的數(shù)組數(shù)量來拆分原數(shù)組。3.numpy.vsplitnumpy.vsplit沿著垂直軸分割,其分割方式與hsplit用法相同。[示例2-20]數(shù)組分割I(lǐng)n

[]:importnumpyasnpa=np.arange(24).reshape(4,6)b=np.split(a,2)c=np.split(a,[2,3])d=np.hsplit(a,3)e=np.vsplit(a,2)print('a=',a)print('b=',b)print('c=',c)print('d=',d)print('e=',e)2.2.5數(shù)組元素添加與刪除數(shù)組元素添加和刪除的元素如表2-14所示。表2-14數(shù)組添加和刪除函數(shù)函數(shù)元素及描述resize返回指定形狀的新數(shù)組append將值添加到數(shù)組末尾insert沿指定軸將值插入到指定下標(biāo)之前delete刪掉某個(gè)軸的子數(shù)組,并返回刪除后的新數(shù)組1.numpy.resizenumpy.resize函數(shù)返回指定大小的新數(shù)組。如果新數(shù)組大小大于原始大小,則包含原始數(shù)組中元素的副本。函數(shù)resize格式如下所示。numpy.resize(arr,shape)參數(shù)arr:要修改大小的數(shù)組。shape:返回?cái)?shù)組的新形狀。2.numpy.appendnumpy.append函數(shù)在數(shù)組的末尾添加值。追加操作會分配整個(gè)數(shù)組,并把原來的數(shù)組復(fù)制到新數(shù)組中。此外,輸入數(shù)組的維度必須匹配否則將生成ValueError。append函數(shù)返回的始終是一個(gè)一維數(shù)組,其格式如下所示。numpy.append(arr,values,axis=None)參數(shù)arr:輸入數(shù)組。values:要向arr添加的值,需要和arr形狀相同(除了要添加的軸)。axis:默認(rèn)為None。當(dāng)axis無定義時(shí),是橫向加成,返回總是為一維數(shù)組。當(dāng)axis有定義的時(shí)候,分別為0和1。當(dāng)axis為0時(shí),數(shù)據(jù)是夾在下邊(列數(shù)要相同);當(dāng)axis為1時(shí),數(shù)組是加在右邊(行數(shù)要相同)。3.numpy.insertnumpy.insert函數(shù)在給定索引之前,沿給定軸在輸入數(shù)組中插入值。numpy.insert(arr,obj,values,axis)參數(shù)說arr:輸入數(shù)組。obj:在其之前插入值的索引。values:要插入的值。axis:沿著它插入的軸,如果未提供,則輸入數(shù)組會被展開。5.numpy.deletenumpy.delete函數(shù)返回從輸入數(shù)組中刪除指定子數(shù)組的新數(shù)組。與insert()函數(shù)的情況一樣,如果未提供軸參數(shù),則輸入數(shù)組將展開。numpy.delete(arr,obj,axis)參數(shù)arr:輸入數(shù)組。obj:可以被切片,整數(shù)或者整數(shù)數(shù)組,表明要從輸入數(shù)組刪除的子數(shù)組。axis:沿著它刪除給定子數(shù)組的軸,如果未提供,則輸入數(shù)組會被展開。[示例2-21]數(shù)組元素的添加與刪除In

[]:importnumpyasnp#resize函數(shù)a=np.arange(4).reshape(2,2)print('a=',a)a.resize((1,4))print('一行四列a=',a)a.resize((4,1))print('四行一列a=',a)#append函數(shù)b=np.arange(6).reshape(3,2)print('數(shù)組b=',b)c=np.append(b,[6,7])print('append的c=',c)d=np.append(b,[[11,12]],axis=0)print('append后的d=',d)e=np.append(b,[[100,200],[300,400],[500,600]],axis=1)print('append后的e=',e)#insert函數(shù)f=np.insert(b,2,11)h=np.insert(b,2,10,axis=0)i=np.insert(b,1,10,axis=1)print('f=',f)print('h=',h)print('i=',i)#delete函數(shù)j=np.delete(i,[1,2],axis=1)k=np.delete(h,2,axis=0)l=np.delete(f,2)print('j=',j)print('k=',k)print('l=',l)2.3數(shù)組索引與切片ndarray對象的內(nèi)容可以通過索引或切片來訪問和修改,與Python中列表的切片操作一樣。2.3.1數(shù)組索引一維NumPy數(shù)組的索引與Python列表的索引相同;二維數(shù)組的索引在單個(gè)或多個(gè)軸向上完成,在某一軸上與一維數(shù)組索引相同。[示例2-22]一維數(shù)組索引In

[]:#一維數(shù)組索引importnumpyasnpa=np.linspace(-10,10,11)print(a)print('a[1]=',a[1],',a[5]=',a[5],',a[10]=',a[10],',a[-1]=',a[-1])a[0],a[1],a[2]=100,200,300print(a)Out[]:[-10.-8.-6.-4.-2.0.2.4.6.8.10.]a[1]=-8.0,a[5]=0.0,a[10]=10.0,a[-1]=10.0[100.200.300.-4.-2.0.2.4.6.8.10.][示例2-23]二維數(shù)組索引In

[]:importnumpyasnpa=np.arange(12).reshape(3,4)print('a=',a)print('a[0]=',a[0],',a[2]=',a[2])print('a[0,0]=',a[0,0],',a[0][0]=',a[0][0],',a[1,2]=',a[1,2],',a[1][2]=',a[1][2])a[0]=10print('a[0]值已修改',a)a[1]=[100,100,100,100]print('a[1]值已修改',a)a[2,0]=1000print('a[2,0]值已修改',a)2.3.2數(shù)組切片一維數(shù)組切片格式是[starting_index,ending_index,step],starting_index表示切片的開始索引,可以省略,省略時(shí)為0,ending_index表示切片的結(jié)束索引,省略時(shí)表示數(shù)組的最后一個(gè)索引,step表示步長,即從開始索引到結(jié)束索引多長取一個(gè)值,默認(rèn)為1。多維數(shù)組的切片是按照軸方向進(jìn)行的,在每一個(gè)軸上與一維數(shù)組相同。當(dāng)切片只有一維時(shí),數(shù)組就會按照0軸方向進(jìn)行切片。[示例2-24]一維數(shù)組切片In

[]:importnumpyasnpa=np.arange(12)print('a=',a)print('a[1:3]=',a[1:3],',a[9:]=',a[9:])print('a[1:7:2]=',a[1:7:2])print('a[:]=',a[:])Out[]:a=[01234567891011]a[1:3]=[12],a[9:]=[91011]a[1:7:2]=[135]a[:]=[01234567891011][示例2-25]二維數(shù)組切片In

[]:importnumpyasnpa=np.arange(12).reshape(3,4)print('a=',a)print('a[0:2][1:3]=',a[0:2][1:3],',a[2:][:2]=',a[2:][1:2])print('a[0:2]=',a[0:2])print('a[:]=',a[:])2.3.3布爾型索引布爾型索引是指使用布爾數(shù)組來索引目標(biāo)數(shù)組,以此找出與布爾數(shù)組中值為True的對應(yīng)的目標(biāo)數(shù)組中的數(shù)據(jù)。注意:布爾數(shù)組的長度必須與目標(biāo)數(shù)組對應(yīng)的軸的長度一致。[示例2-26]布爾索引In

[]:importnumpyasnpfromnumpy.randomimportrandn#用來生成一些正態(tài)分布的隨機(jī)數(shù)據(jù)names=np.array(['張','王','李','趙','上官','公孫'])#儲存姓名的數(shù)組data=randn(6,3)#生成含隨機(jī)值的數(shù)組print(data)print('上官對應(yīng)的行:',data[names=='上官'])In

[55]:importnumpyasnpa=np.arange(12).reshape(3,4)print(a)print('a>5',a>5)print('a[a>5]',a[a>5])Out[]:[[0123][4567][891011]]a>5[[FalseFalseFalseFalse][FalseFalseTrueTrue][TrueTrueTrueTrue]]a[a>5][67891011]2.3.4花式索引花式索引是可以通過整數(shù)列表或數(shù)組進(jìn)行索引,也可以使用np.ix_函數(shù)完成同樣的操作。[示例2-27]花式索引In

[]:importnumpyasnpa=np.arange(16).reshape(4,4)print('花式索引1:',a[[0,2,3]][[0,2]])print('花式索引2:',a[[0,2,3]][:,[0,2]])print('ix=',np.ix_([0,2,3],[0,2]))print('花式索引3:',a[np.ix_([0,2,3],[0,2])])2.4數(shù)組的運(yùn)算數(shù)組的運(yùn)算支持向量化運(yùn)算,并且比Python具有更快的運(yùn)算速度。2.4.1數(shù)組和標(biāo)量間的運(yùn)算數(shù)組與標(biāo)量的算術(shù)運(yùn)算,以及相同維度的數(shù)組的算術(shù)運(yùn)算都是直接應(yīng)用到元素中,也就是元素級運(yùn)算。[示例2-28]數(shù)組和標(biāo)量運(yùn)算In

[]:importnumpyasnpa=np.arange(6)b=a*10c=a.reshape(2,3)d=c*100print('a=',a)print('b=',b)print('c=',c)print('d=',d)Out[]:a=[012345]b=[01020304050]c=[[012][345]]d=[[0100200][300400500]]e=[01491625]2.4.2廣播廣播是指NumPy在算術(shù)運(yùn)算期間處理不同形狀的數(shù)組的能力。對數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。如果兩個(gè)陣列具有完全相同的形狀,則這些操作可被無縫執(zhí)行。如果兩個(gè)數(shù)組的維數(shù)不相同,則元素到元素的操作是不可能的。然而,在NumPy中仍然可以對形狀不相似的數(shù)組進(jìn)行操作,因?yàn)樗鼡碛袕V播功能。較小的數(shù)組會被廣播到較大數(shù)組的大小,以便使它們的形狀可兼容。如果上述規(guī)則產(chǎn)生有效結(jié)果,并且滿足以下條件之一,那么數(shù)組被稱為可廣播的。1.數(shù)組擁有相同形狀。2.數(shù)組擁有相同的維數(shù),每個(gè)維度擁有相同長度,或者長度為1。3.數(shù)組擁有極少的維度,可以在其前面追加長度為1的維度,使上述條件成立。[示例2-29]廣播In

[]:importnumpyasnpa=np.array([1,2])b=np.array([11,12])c=np.array([[11,12],[13,14]])print('a+b=',a+b)print('a+c',a+c)Out[]:a+b=[1214]a+c[[1214][1416]]2.4.3算數(shù)函數(shù)算術(shù)運(yùn)算的一目函數(shù)如表2-15所示。表2-15一目數(shù)學(xué)函數(shù)函數(shù)描述用法absfabs計(jì)算整型/浮點(diǎn)/復(fù)數(shù)的絕對值對于沒有復(fù)數(shù)的快速版本求絕對值np.abs()np.fabs()sqrt計(jì)算元素的平方根。等價(jià)于array**0.5np.sqrt()square計(jì)算元素的平方。等價(jià)于array**2np.squart()exp計(jì)算以自然常數(shù)e為底的冪次方np.exp()Loglog10log2log1p自然對數(shù)(e)基于10的對數(shù)基于2的對數(shù)基于log(1+x)的對數(shù)np.log()np.log10()np.log2()np.log1p()sign計(jì)算元素的符號:1:正數(shù)0:0-1:負(fù)數(shù)np.sign()ceil計(jì)算大于或等于元素的最小整數(shù)np.ceil()floor計(jì)算小于或等于元素的最大整數(shù)np.floor()around四舍五入到給定的小數(shù)位np.around()rint對浮點(diǎn)數(shù)取整到最近的整數(shù),但不改變浮點(diǎn)數(shù)類型np.rint()modf分別返回浮點(diǎn)數(shù)的整數(shù)和小數(shù)部分的數(shù)組np.modf()isnan返回布爾數(shù)組標(biāo)識哪些元素是NaN(不是一個(gè)數(shù))np.isnan()isfiniteisinf判斷元素是有限的數(shù)判斷元素是否無限大np.isfiniter()np.isinf()cos,cosh,sinsinh,tan,tanh三角函數(shù)arccos,arccosh,arcsin,arcsinh,arctan,arctanh反三角函數(shù)logical_and/or/not/xor邏輯與/或/非/異或等價(jià)于‘&’‘|’‘!’‘^’Numpy數(shù)學(xué)運(yùn)算的二目函數(shù)入保2-16所示。表2-16二目數(shù)學(xué)函數(shù)函數(shù)描述用法add數(shù)組對應(yīng)元素相加np.add(A,B)substract數(shù)組對應(yīng)元素相減np.substract(A,B)dotmultiply*dot是是叉積,數(shù)組和矩陣對應(yīng)位置相乘multiply是點(diǎn)積,矩陣對應(yīng)位置相乘,要求矩陣維度相同*是點(diǎn)積,對數(shù)組執(zhí)行對應(yīng)位置相乘,必要時(shí)使用廣播規(guī)則divide=/true_dividefloor_divide=//數(shù)組對應(yīng)元素相除地板除mod,remainder,fmod模運(yùn)算power使用第二個(gè)數(shù)組作為指數(shù),計(jì)算第一個(gè)數(shù)組中的元素np.power(A,B)maximum兩數(shù)組對應(yīng)元素比大小取其大者,返回一個(gè)數(shù)組np.maximum:(X,Y,out=None)minimun兩數(shù)組對應(yīng)元素比大小取其小者copysign將第二個(gè)數(shù)組中各元素的符號賦值給第一個(gè)數(shù)組的對應(yīng)元素greater,greater_equal,less,less_equal,equal,not_equal基于元素的比較,產(chǎn)生布爾數(shù)組。等價(jià)于>,>=,<,<=,==,!=[示例2-30]三角函數(shù)與反三角函數(shù)In

[]:importnumpyasnpa=np.array([0,30,45,60,90])b=a*np.pi/180#通過乘pi/180轉(zhuǎn)化為弧度print('正弦值:',np.sin(b))print('余弦值:',np.cos(b))print('正切值:',np.tan(b))c=np.arcsin(np.sin(b))#求正弦后再求反正弦print(c*180/np.pi)#弧度轉(zhuǎn)化為角度Out[]:正弦值:[0.0.50.707106780.86602541.]余弦值:[1.00000000e+008.66025404e-017.07106781e-015.00000000e-016.12323400e-17]正切值:[0.00000000e+005.77350269e-011.00000000e+001.73205081e+001.63312394e+16][0.30.45.60.90.][示例2-31]around函數(shù)In

[]:importnumpyasnpa=np.array([1.2,15.55,123.45,0.537,125.32])print('原數(shù)組:',a)print('舍入后:')print(np.around(a))print(np.around(a,decimals=1))print(np.around(a,decimals=-1))Out[]:原數(shù)組:[1.215.55123.450.537125.32]舍入后:[1.16.123.1.125.][1.215.6123.40.5125.3][0.20.120.0.130.][示例2-32]power函數(shù)In

[]:importnumpyasnpa=np.array([1,2,3,4,5])b=np.array([5,4,3,2,1])c=np.power(a,b)d=np.sqrt(a)print(c)print(d)Out[]:[11627165][1.1.414213561.732050812.2.23606798][示例2-33]floor函數(shù)與ceil函數(shù)In

[]:importnumpyasnpa=np.array([-2.8,0.75,-1.2,5.6,100])print('提供的數(shù)組:',a)print('floor后的數(shù)組:',np.floor(a))print('ceil后的數(shù)組',np.ceil(a))Out[]:提供的數(shù)組:[-2.80.75-1.25.6100.]floor后的數(shù)組:[-3.0.-2.5.100.]ceil后的數(shù)組[-2.1.-1.6.100.][示例2-34]dd、subtract、multiply和divide函數(shù)In

[]:importnumpyasnpa=np.array([[0,1,2],[3,4,5],[6,7,8]])b=np.array([11,12,13])print(np.add(a,b))print(np.subtract(a,b))print(np.multiply(a,b))print(np.divide(a,b))Out[]:[[111315][141618][171921]][[-11-11-11][-8-8-8][-5-5-5]][[01226][334865][6684104]][[0.0.083333330.15384615][0.272727270.333333330.38461538][0.545454550.583333330.61538462]][示例2-35]次方與平方根In

[33]:importnumpyasnpa=np.array([1,4,9,16])b=np.power(a,2)c=np.sqrt(a)print('數(shù)組:',a)print('平方:',b)print('算術(shù)平方根:',b)數(shù)組:[14916]平方:[11681256]算術(shù)平方根:[11681256][示例2-36]mod函數(shù)In

[]:importnumpyasnpa=np.arange(11,20)b=np.arange(1,10)print('a=',a)print('b=',b)print('mod(a,b)=',np.mod(a,b))Out[]:a=[111213141516171819]b=[123456789]mod(a,b)=[001204321]2.4.4集合運(yùn)算NumPy庫提供了針對一維數(shù)組的基本集合運(yùn)算,如表2-17所示。表2-17集合運(yùn)算函數(shù)使用說明unique(x)唯一值intersectld(x,y)公共元素unionld(x,y)并集inld(x,y)x的元素是否在y中,返回布爾型數(shù)組setdiffla(x,y)集合的差setxorld(x,y)交集取反1.unique唯一值在數(shù)據(jù)分析中,常使用np.unique方法來找出數(shù)組中的唯一值,即去除數(shù)組中的重復(fù)元素,格式如下。numpy.unique(arr,return_index,return_inverse,return_counts)參數(shù)arr:輸入數(shù)組,如果不是一維數(shù)組則會展開。return_index:如果為true,返回新列表元素在舊列表中的位置(下標(biāo)),并以列表形式儲。return_inverse:如果為true,返回舊列表元素在新列表中的位置(下標(biāo)),并以列表形式儲。return_counts:如果為true,返回去重?cái)?shù)組中的元素在原數(shù)組中的出現(xiàn)次數(shù)。2.inld是否包含np.inld方法方法用于測試第一個(gè)數(shù)組中的元素是否包含在第二個(gè)數(shù)組中,第一個(gè)數(shù)組的每個(gè)元素返回一個(gè)布爾值(元素在第二個(gè)數(shù)組返回True,否則返回False),函數(shù)返回一個(gè)布爾型數(shù)組。[示例2-37]unique函數(shù)In

[]:#uniqe函數(shù)importnumpyasnpa=np.array([1,2,6,1,7,6,2,8,2,9,3,2])print('a=',a)print('去重值:',np.unique(a))u,indices=np.unique(a,return_index=True)print('去重?cái)?shù)組的索引數(shù)組:',indices)u,indices=np.unique(a,return_inverse=True)print('下標(biāo)為:',indices)print('使用下標(biāo)重構(gòu)原數(shù)組:',u[indices])print('返回去重元素的重復(fù)數(shù)量:')u,indices=np.unique(a,return_counts=True)print(u)print(indices)Out[]:a=[126176282932]去重值:[1236789]去重?cái)?shù)組的索引數(shù)組:[01102479]下標(biāo)為:[013043151621]使用下標(biāo)重構(gòu)原數(shù)組:[126176282932]返回去重元素的重復(fù)數(shù)量:[1236789][2412111][示例2-38]inld函數(shù)In

[]:importnumpyasnpx=np.array([1,3,4,6])y=np.array([1,2,3,4])z=np.array([3,4,5,6])print(np.in1d(x,y))print(np.in1d(x,z))Out[]:[TrueTrueTrueFalse][FalseTrueTrueTrue]2.4.5統(tǒng)計(jì)運(yùn)算NumPy庫支持對整個(gè)數(shù)組或按指定軸向的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算。例如,sum函數(shù)用于求和;mean函數(shù)用于求算術(shù)平均數(shù);std函數(shù)用于求標(biāo)準(zhǔn)差?;緮?shù)組的統(tǒng)計(jì)方法如表2-18所示表2-18基本數(shù)組統(tǒng)計(jì)方法方法使用說明sum求和mean算數(shù)平均數(shù)std、var標(biāo)準(zhǔn)差和方差min、max最小值和最大值argmin、argmax最小和最大元素的索引cumsum所有元素的累計(jì)和cumprod所有元素的累計(jì)積統(tǒng)計(jì)函數(shù)具有axis參數(shù),用于計(jì)算指定軸方向的統(tǒng)計(jì)值,axis默認(rèn)值為None,此時(shí)把數(shù)組當(dāng)成一維數(shù)組。cumsum和cumpod方法按照所給定的軸參數(shù)返回元素的梯形累計(jì)。[示例2-39]統(tǒng)計(jì)函數(shù)In

[]:importnumpyasnpa=np.arange(9).reshape(3,3)print(a)print('sum=',np.sum(a))print('mean=',np.mean(a))print('std=',np.std(a))print('var=',np.var(a))print('argmin=',np.argmin(a))print('argmax=',np.argmax(a))print('cumsum=',np.cumsum(a))print('cumprod=',np.cumprod(a))print('第0軸sum=',np.sum(a,0))print('第1軸mean=',np.mean(a,1))print('第0軸std=',np.std(a,0))print('第1軸var=',np.var(a,1))print('第0軸argmin=',np.argmin(a,0))print('第1軸argmax=',np.argmax(a,1))print('第0軸cumsum=',np.cumsum(a,1))print('第1軸cumprod=',np.cumprod(a,0))2.4.6排序NumPy中提供了各種排序相關(guān)功能。這些排序函數(shù)實(shí)現(xiàn)不同的排序算法,排序算法的不同在于執(zhí)行速度,最壞情況性能,所需的工作空間和算法的穩(wěn)定性。1.numpy.sort()函數(shù)sort()返回輸入數(shù)組的排序副本,格式如下。numpy.sort(a,axis,kind,order)其中參數(shù)如下所示。a要排序的數(shù)組。axis沿著它排序數(shù)組的軸,如果沒有數(shù)組會被展開,沿著最后的軸排序。kind默認(rèn)為'quicksort'(快速排序)。(4)order如果數(shù)組包含字段,則是要排序的字段。其中kind取值如表2-19所示。表2-19排序算法種類排序算法最壞情況'quicksort'快速排序O(n^2)'mergesort'歸并排序O(n*log(n))'heapsort'堆排序O(n*log(n))2.argsort排序numpy.argsort()函數(shù)對輸入數(shù)組沿給定軸執(zhí)行間接排序,并使用指定排序類型返回?cái)?shù)據(jù)的索引數(shù)組。這個(gè)索引數(shù)組用于構(gòu)造排序后的數(shù)組。[示例2-40]sort排序In

[]:importnumpyasnpa=np.array([[2,5,6],[8,6,4],[6,4,9]])print('a=',a)print('a排序(默認(rèn)最后1軸):',np.sort(a))#沿著最后的軸(第1軸)排序print('a按照第0軸排序:',np.sort(a,0))#沿著第0軸)排序dt=np.dtype([('sno','S10'),('score','int8')])b=np.array([('1908',56),('1902',98),('1903',72),('1909',88),('1906',65)],dtype=dt)print('b=',b)print(np.sort(b,order='sno'))c=np.argsort(a)print('argsort排序索引:',c)print(a[c])[示例2-41]argsort排序In

[]:importnumpyasnpx=np.array([3,1,2])y=np.argsort(x)print('y=',y)print('x=',x)print('x[y]=',x[y])Out[]:y=[120]x=[312]x[y]=[123]2.4.7搜索1.numpy.where()where()有兩種形式。(1)np.where(condition)參數(shù)只有條件condition,輸出滿足條件元素的坐標(biāo)(索引)。這里的坐標(biāo)以tuple的形式給出,通常原數(shù)組有多少維,輸出的tuple中就包含幾個(gè)數(shù)組,分別對應(yīng)符合條件元素的各維坐標(biāo)。(2)np.where(condition,x,y)滿足條件condition輸出x,不滿足輸出y。2.numpy.extract()extract()函數(shù)返回滿足任何條件的元素。3.numpy.nonzero()numpy.nonzero()函數(shù)返回輸入數(shù)組中非零元素的索引。[示例2-42]搜索In

[35]:importnumpyasnpx=np.arange(9.).reshape(3,3)print('我們的數(shù)組是:',x)print('大于3的元素的索引:',np.where(x>3))print('大于3的元素:',x[np.where(x>3)])print(np.where(x>3,'大','小'))print('extract函數(shù),整除2的數(shù):',np.extract(np.mod(x,2)==0,x))print('nonzero:',np.nonzero(x))print('x中非零數(shù):',x[np.nonzero(x)])2.5線性代數(shù)數(shù)組的運(yùn)算大多是元素級的,數(shù)組相乘的結(jié)果是各對應(yīng)元素的積組成的數(shù)組,但是矩陣相乘使用的是點(diǎn)積,NumPy庫提供用于矩陣乘法的dot函數(shù)。另外NumPy庫的linalg模塊來完成具有線性代數(shù)運(yùn)算方法。NumPy提供的線性代數(shù)函數(shù)如表2-20所示。表2-20線性代數(shù)函數(shù)函數(shù)描述dot兩個(gè)數(shù)組的點(diǎn)積,即元素對應(yīng)相乘。vdot兩個(gè)向量的點(diǎn)積det數(shù)組的行列式solve求解線性矩陣方程inv計(jì)算矩陣的乘法逆矩陣2.5.1數(shù)組相乘1.函數(shù)dot()函數(shù)dot對于兩個(gè)一維的數(shù)組,計(jì)算的是這兩個(gè)數(shù)組對應(yīng)下標(biāo)元素的乘積和(內(nèi)積);對于二維數(shù)組,計(jì)算的是兩個(gè)數(shù)組的矩陣乘積。numpy.dot(a,b,out=None)參數(shù)說明:a

:ndarray數(shù)組b

:ndarray數(shù)組out

:ndarray,可選,用來保存dot()的計(jì)算結(jié)果2.函數(shù)vdot()函數(shù)vdot是兩個(gè)向量的點(diǎn)積。如果第一個(gè)參數(shù)是復(fù)數(shù),那么它的共軛復(fù)數(shù)會用于計(jì)算。如果參數(shù)是多維數(shù)組,它會被展開。[示例2-43]數(shù)組乘積In

[]:importnumpyasnpa=np.array([[1,2],[3,4]])b=np.array([[5,6],[7,8]])c=np.dot(a,b)d=np.vdot(a,b)print('dot=',c)#矩陣乘積print('vdot=',d)#=1*3+2*4+5*7+6*8=70Out[]:dot=[[1922][4350]]vdot=702.5.2矩陣行列式numpy.linalg.det()函數(shù)計(jì)算輸入矩陣的行列式。[示例2-44]求矩陣行列式In

[]:importnumpyasnpa=np.array([[1,2],[3,4]])b=np.linalg.det(a)print(b)Out[]:-2.00000000000000042.5.3逆矩陣numpy.linalg.inv()函數(shù)計(jì)算矩陣的乘法逆矩陣。注意:如果矩陣是奇異的或者非方陣,使用inv函數(shù)求逆矩陣,會出現(xiàn)錯(cuò)誤。[示例2-45]逆矩陣In

[]:importnumpyasnpa=np.array([[1,2],[3,4]])b=np.linalg.inv(a)print(a)print(b)print(np.dot(a,b))#驗(yàn)證Out[]:[[12][34]][[-2.1.][1.5-0.5]][[1.0000000e+000.0000000e+00][8.8817842e-161.0000000e+00]]2.5.4線性方程組numpy.linalg中的solve函數(shù)可以求解線性方程組線性方程組Ax=b,其中A是一個(gè)矩陣,b是一維或者二維數(shù)組,而x是未知量。[示例2-46]求解線性方程x+y+z=62y+5z=-42x+5y-z=27In

[]:importnumpyasnpA=np.mat("111;025;25-1");b=np.array([6,-4,27])x=np.linalg.solve(A,b)print('方程解:',x)print(c.ndim)print(np.dot(A,x))#驗(yàn)證Out[]:方程解:[5.3.-2.]1[[6.-4.27.]]2.5.5特征值和特征向量計(jì)算特征值時(shí),我們可以求助于numpy.linalg程序包提供的eigvals()函數(shù)eig()函數(shù),其中函數(shù)eigvals返回矩陣的特征向量,eig函數(shù)返回一個(gè)元組,其元素為特征值和特征向量。[示例2-47]特征值和特征向量In

[]:importnumpyasnpA=np.mat("1-1;24")e=np.linalg.eigvals(A)print('eigvals特征值:',e)e,v=np.linalg.eig(A)print("

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論