Python大數(shù)據(jù)分析 課件 第2章 NumPy數(shù)值計(jì)算_第1頁
Python大數(shù)據(jù)分析 課件 第2章 NumPy數(shù)值計(jì)算_第2頁
Python大數(shù)據(jù)分析 課件 第2章 NumPy數(shù)值計(jì)算_第3頁
Python大數(shù)據(jù)分析 課件 第2章 NumPy數(shù)值計(jì)算_第4頁
Python大數(shù)據(jù)分析 課件 第2章 NumPy數(shù)值計(jì)算_第5頁
已閱讀5頁,還剩167頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

NumPy數(shù)值計(jì)算NumPy多維數(shù)組2.1數(shù)組操作2.2數(shù)組索引與切片2.3目錄CONTENTE第二章NumPy數(shù)值計(jì)算數(shù)組的運(yùn)算2.4線性代數(shù)2.5隨機(jī)漫步目錄CONTENTE第二章NumPy數(shù)值計(jì)算2.9小結(jié)視圖與副本2.7數(shù)組的存取2.62.8本章要點(diǎn)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ù)組的存取操作方法。Python第二章NumPy數(shù)值計(jì)算引言NumPy是用于科學(xué)計(jì)算的一個(gè)開源的Python程序庫,它為Python提供了高性能數(shù)組與矩陣運(yùn)算處理能力,為數(shù)據(jù)分析提供了數(shù)據(jù)處理的基礎(chǔ)功能。Python第二章NumPy數(shù)值計(jì)算NumPy多維數(shù)組2.1Python第二章NumPy數(shù)值計(jì)算NumPy提供了一個(gè)名為ndarray的多維數(shù)組對(duì)象,該數(shù)組元素具有固定大小,即NumPy數(shù)組元素是同質(zhì)的,只能存放同一種數(shù)據(jù)類型的對(duì)象,因此能夠確定存儲(chǔ)數(shù)組所需空間的大小,能夠運(yùn)用向量化運(yùn)算來處理整個(gè)數(shù)組,具有較高的運(yùn)算效率。Python第二章NumPy數(shù)值計(jì)算Python第二章NumPy數(shù)值計(jì)算可以通過多種方式創(chuàng)建NumPy數(shù)組。1.通過array函數(shù)創(chuàng)建ndarray數(shù)組NumPy的array函數(shù)可以創(chuàng)建ndarray數(shù)組,對(duì)于多維數(shù)組的創(chuàng)建,使用嵌套序列數(shù)據(jù)即可完成。函數(shù)array可以將Python的列表、元組、數(shù)組或其他序列類型作為參數(shù)創(chuàng)建ndarray數(shù)組。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算可以通過多種方式創(chuàng)建NumPy數(shù)組。1.通過array函數(shù)創(chuàng)建ndarray數(shù)組NumPy的array函數(shù)可以創(chuàng)建ndarray數(shù)組,對(duì)于多維數(shù)組的創(chuàng)建,使用嵌套序列數(shù)據(jù)即可完成。函數(shù)array可以將Python的列表、元組、數(shù)組或其他序列類型作為參數(shù)創(chuàng)建ndarray數(shù)組。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算[示例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]]Python第二章NumPy數(shù)值計(jì)算[示例2-3]字符串作為array參數(shù)In[]:importnumpyasnpa3=np.array('abcdefg')a3Out[]:array('abcdefg',dtype='<U7')PythonPython第二章NumPy數(shù)值計(jì)算[示例2-4]元組作為array參數(shù)In[]:importnumpyasnpa4=np.array((1,2,3))a4Out[]:array([1,2,3])Python第二章NumPy數(shù)值計(jì)算[示例2-5]字典作為array參數(shù)In[]:importnumpyasnpa5=np.array({'zhang':12,'dd':45})a5Out[]:array({'zhang':12,'dd':45},dtype=object)Python第二章NumPy數(shù)值計(jì)算NumPy提供了創(chuàng)建特殊數(shù)組的函數(shù),如表2-1所示。2.1.1數(shù)組創(chuàng)建表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單位矩陣Python第二章NumPy數(shù)值計(jì)算[示例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)Python第二章NumPy數(shù)值計(jì)算[示例2-6]創(chuàng)建特殊數(shù)組b5=np.ones_like(b1)print('b5=')print(b5)Out[]:b1=[[1.1.1.][1.1.1.]]b2=[[0.0.0.0.0.][0.0.0.0.0.][0.0.0.0.0.]]Python第二章NumPy數(shù)值計(jì)算[示例2-6]創(chuàng)建特殊數(shù)組b3=[[1.1.][1.1.][1.1.][1.1.]]b4=[[1.0.0.][0.1.0.][0.0.1.]]b5=[[1.1.1.][1.1.1.]]Python第二章NumPy數(shù)值計(jì)算[示例2-6]創(chuàng)建特殊數(shù)組程序分析(1)b1=np.empty((2,3))創(chuàng)建2行3列的二維數(shù)組。(2)b2=np.zeros((3,5))創(chuàng)建了3行5列的二維數(shù)組,其元素的值均為0。(3)b3=np.ones((4,2))創(chuàng)建了4行2列的二維數(shù)組,其元素的值均為1。(4)b5=np.ones_like(b1)創(chuàng)建了與b1結(jié)構(gòu)相同(2行3列)的數(shù)組,其元素的值均為1。Python第二章NumPy數(shù)值計(jì)算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對(duì)象,函數(shù)格式如下所示。numpy.arange(start,stop,step,dtype)2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算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對(duì)象,函數(shù)格式如下所示。numpy.arange(start,stop,step,dtype)2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算其中參數(shù)如表2-2所示2.1.1數(shù)組創(chuàng)建參數(shù)描述start起始值,默認(rèn)為0stop終止值(不包含)step步長,默認(rèn)為1dtype返回ndarray的數(shù)據(jù)類型,如果沒有提供,則會(huì)使用輸入數(shù)據(jù)的類型Python第二章NumPy數(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.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算表2-3linspace函數(shù)參數(shù)2.1.1數(shù)組創(chuàng)建參數(shù)描述start序列的起始值stop序列的終止值,如果endpoint為true,該值包含于數(shù)列中num要生成的等步長的樣本數(shù)量,默認(rèn)為50endpoint該值為ture時(shí),數(shù)列中包含stop值,反之不包含,默認(rèn)是True。retstep如果為True時(shí),生成的數(shù)組中會(huì)顯示間距,反之不顯示。dtypendarray的數(shù)據(jù)類型Python第二章NumPy數(shù)值計(jì)算(3)logspace函數(shù)logspace函數(shù)用于創(chuàng)建一個(gè)對(duì)數(shù)運(yùn)算的等比數(shù)列,其格式如下所示。np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)函數(shù)參數(shù)如表2-4所示。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算表2-4logspace函數(shù)參數(shù)2.1.1數(shù)組創(chuàng)建參數(shù)描述start序列的起始值stop序列的終止值為。如果endpoint為true,該值包含于數(shù)列中num要生成的等步長的樣本數(shù)量,默認(rèn)為50endpoint該值為ture時(shí),數(shù)列中中包含stop值,反之不包含,默認(rèn)是Truebase對(duì)數(shù)log的底數(shù)dtypendarray的數(shù)據(jù)類型Python第二章NumPy數(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)Out[]:c1=[0123456789]c2=[1.2.3.4.5.6.7.8.9.10.]c3=[1.e+0101.e+0201.e+0301.e+0401.e+0501.e+0601.e+0701.e+0801.e+0901.e+100]Python第二章NumPy數(shù)值計(jì)算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.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算表2-5asarray函數(shù)參數(shù)2.1.1數(shù)組創(chuàng)建參數(shù)描述a任意形式的輸入?yún)?shù),可以是列表、列表的元組、元組、元組的元組、元組的列表、多維數(shù)組dtype數(shù)據(jù)類型,可選order可選,有"C"和"F"兩個(gè)選項(xiàng),分別代表行優(yōu)先和列優(yōu)先Python第二章NumPy數(shù)值計(jì)算[示例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列表。Python第二章NumPy數(shù)值計(jì)算5.隨機(jī)數(shù)數(shù)組通過NumPy的隨機(jī)數(shù)函數(shù)可以創(chuàng)建隨機(jī)數(shù)數(shù)組,在numpy.random模塊中,提供了多種隨機(jī)生成函數(shù)。如表2-6所示。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算表2-6隨機(jī)數(shù)函數(shù)2.1.1數(shù)組創(chuàng)建函數(shù)使用說明rand產(chǎn)生均勻分布的樣本值randint給定范圍內(nèi)取隨機(jī)整數(shù)randn產(chǎn)生正態(tài)分布的樣本值seed隨機(jī)數(shù)種子permutation對(duì)一個(gè)序列隨機(jī)排序,不改變原數(shù)組shuffle對(duì)一個(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ā)生率Python第二章NumPy數(shù)值計(jì)算(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對(duì)象或者一個(gè)float型的值。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算[示例2-9]rand函數(shù)In[]:importnumpyasnpa=np.random.rand(2,4)print(a)Out[]:[[0.188212090.768048560.316783370.67669764][0.997522760.746654830.454623160.26944658]]Python第二章NumPy數(shù)值計(jì)算(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ù)組對(duì)象。指定抽樣區(qū)間為[low,high),low的默認(rèn)值為0.0,hign的默認(rèn)值為1.0;size是int型或int型元組。指定形狀,如果不提供size,則返回一個(gè)服從該分布的隨機(jī)數(shù)。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算[示例2-10]uniform函數(shù)In[]:importnumpyasnpa=np.random.uniform(size=(2,4))b=np.random.uniform(3,5,(2,4))print(a)print(b)Out[]:[[0.923610270.501347320.113047470.81518805][0.518947460.235784570.602820230.41728721]][[4.867486134.467117464.40142713.02693896][4.868575453.105956344.92024163.98067133]]Python第二章NumPy數(shù)值計(jì)算(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對(duì)象或者float。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算[示例2-11]randn函數(shù)In[]:importnumpyasnpa=np.random.randn(2,4)print(a)Out[]:[[1.075747050.91538959-0.65044272-0.72923101][1.149853131.46248009-0.28638526-1.36546459]]Python第二章NumPy數(shù)值計(jì)算(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ù)組對(duì)象,指定均值

。scale:float型或者float型的類數(shù)組對(duì)象,指定標(biāo)準(zhǔn)差。size:int型或者int型的元組,指定了數(shù)組的形狀。如果不提供size,且loc和scale為標(biāo)量(不是類數(shù)組對(duì)象),則返回一個(gè)服從該分布的隨機(jī)數(shù)。輸出:ndarray對(duì)象或者一個(gè)標(biāo)量。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算[示例2-12]normal函數(shù)In[]:importnumpyasnpa=np.random.normal(size=(2,4))print(a)Out[]:[[2.627471911.4300209-2.145036930.1861132][-0.56336120.69056262-0.191840330.47298779]]Python第二章NumPy數(shù)值計(jì)算(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對(duì)象,否則返回一個(gè)服從該分布的int型隨機(jī)數(shù)。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算[示例2-13]randint函數(shù)In[]:importnumpyasnpa=np.random.randint(1,10,size=(2,4))print(a)Out[]:[[5187][1542]]Python第二章NumPy數(shù)值計(jì)算(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對(duì)象。2.1.1數(shù)組創(chuàng)建Python第二章NumPy數(shù)值計(jì)算[示例2-13]random函數(shù)In

[]:importnumpyasnpa=np.random.random((2,4))print(a)Out[]:[[0.522719380.428706430.795221860.73455796][0.689206930.714596070.148150490.38641433]]Python第二章NumPy數(shù)值計(jì)算ndarray對(duì)象具有多個(gè)十分有用的屬性,如表2-7所示。表2-7ndarray對(duì)象屬性2.1.2數(shù)組對(duì)象屬性屬性使用說明ndim秩,即數(shù)據(jù)軸的個(gè)數(shù)shape數(shù)組的維度size元素的總個(gè)數(shù)dtype數(shù)據(jù)類型itemsize數(shù)組中每個(gè)元素的字節(jié)大小nbytes存儲(chǔ)整個(gè)數(shù)組所需的字節(jié)數(shù)量,是itemsize屬性值和size屬性值之積T數(shù)組的轉(zhuǎn)置flat返回一個(gè)numpy.flatiter對(duì)象,可以使用flat的迭代器來遍歷數(shù)組Python第二章NumPy數(shù)值計(jì)算屬性T。如果數(shù)組的秩(rank)小于2,那么所得只是一個(gè)數(shù)組的視圖。屬性flat提供了一種遍歷方式,同時(shí)還可以給flat屬性賦值。不過賦值會(huì)覆蓋整個(gè)數(shù)組內(nèi)所有元素的值。2.1.2數(shù)組對(duì)象屬性Python第二章NumPy數(shù)值計(jì)算[示例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=",")Python第二章NumPy數(shù)值計(jì)算[示例2-14]random函數(shù)Out[]:[01234]a=[[0.1.2.][3.4.5.]]2(2,3)6float64848數(shù)組轉(zhuǎn)置[[0.3.][1.4.][2.5.]]0.0,1.0,2.0,3.0,4.0,5.0,Python第二章NumPy數(shù)值計(jì)算Python雖然支持整型、浮點(diǎn)型和復(fù)數(shù)型,但對(duì)于科學(xué)計(jì)算來說,仍然需要更多的數(shù)據(jù)類型來滿足在精度和存儲(chǔ)大小方面的各種不同要求。NumPy提供了豐富的數(shù)據(jù)類型,如表2-8所示。表2-8數(shù)據(jù)類型2.1.3數(shù)組數(shù)據(jù)類型類型說明bool布爾型(值為True或False),占用1bitinti其長度取決于平臺(tái)的整數(shù)(通常為int32或者int64)int8字節(jié)類型(取值范圍從-128~127)int16整型(取值范圍32768~32767)int32整型(取值范圍為-231~231-1)int64整型(取值范圍為-263~263-1)uint8無符號(hào)整型(取值范圍為0~255)uint16無符號(hào)整型(取值范圍為0~65535)uint32無符號(hào)整型(取值范圍為0~232-1)uint64無符號(hào)整型()(取值范圍為0~2641)float16半精度浮點(diǎn)型:符號(hào)占用1bit,指數(shù)占用5bit,尾數(shù)占用10bitfloat32單精度浮點(diǎn)型:符號(hào)占用1bit,指數(shù)占用8bit,尾數(shù)占用23bitfloat64位或者float雙精度浮點(diǎn)型:符號(hào)占用1bit,指數(shù)占用11bit,尾數(shù)占用52bitcomplex64復(fù)數(shù)類型,由兩個(gè)32位浮點(diǎn)數(shù)(實(shí)部和虛部)表示complex128或者complex復(fù)數(shù)類型,由兩個(gè)64位浮點(diǎn)數(shù)(實(shí)部和虛部)表示Python第二章NumPy數(shù)值計(jì)算注意:(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)換就會(huì)報(bào)錯(cuò)。(4)astype方法會(huì)創(chuàng)建一個(gè)新的數(shù)組,并不會(huì)改變原有數(shù)組的數(shù)據(jù)類型。2.1.3數(shù)組數(shù)據(jù)類型Python第二章NumPy數(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)Python第二章NumPy數(shù)值計(jì)算[示例2-16]astype函數(shù)Out[]:a=[[1.12.2][3.33.4]]b=[[12][33]]c.dtype=int8數(shù)據(jù)類型轉(zhuǎn)換后的dtype=float64c的數(shù)據(jù)類型沒有改變,c.dtype=int8Python第二章NumPy數(shù)值計(jì)算備注:數(shù)據(jù)類型的名稱以數(shù)字結(jié)尾,表示該類型的變量所占用的二進(jìn)制位數(shù)。1.dtype指定數(shù)據(jù)類型創(chuàng)建數(shù)組時(shí),如果沒有指定數(shù)據(jù)類型,NumPy會(huì)給新建的數(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)換成指定類型。2.1.3數(shù)組數(shù)據(jù)類型Python第二章NumPy數(shù)值計(jì)算[示例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=",")數(shù)組操作2.2Python第二章NumPy數(shù)值計(jì)算Python第二章NumPy數(shù)值計(jì)算NumPy中包含了一些函數(shù)用于操作數(shù)組,大致分為六類:修改數(shù)組形狀、翻轉(zhuǎn)數(shù)組、修改數(shù)組維度、連接數(shù)組、分割數(shù)組、數(shù)組元素的添加與刪除。Python第二章NumPy數(shù)值計(jì)算1.reshape函數(shù)函數(shù)reshape在不改變數(shù)據(jù)的條件下修改形狀,其格式如下。numpy.reshape(arr,newshape,order='C')其函數(shù)參數(shù)如表2-10所示。表2-10reshape函數(shù)參數(shù)2.2.1修改數(shù)組形狀參數(shù)描述arr要修改形狀的數(shù)組newshape新形狀參數(shù),為整數(shù)或者整數(shù)數(shù)組,新的形狀應(yīng)當(dāng)兼容原有形狀order'C'按行,'F'按列,'A'原順序,'k'元素在內(nèi)存中的出現(xiàn)順序。Python第二章NumPy數(shù)值計(jì)算2.flatten函數(shù)函數(shù)flatten返回一份數(shù)組拷貝,對(duì)拷貝所做的修改不會(huì)影響原始數(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()返回一份拷貝,對(duì)拷貝所做的修改不會(huì)影響原始數(shù)組,而numpy.ravel返回的是視圖,對(duì)視圖修改會(huì)影響原始數(shù)組。2.2.1修改數(shù)組形狀Python第二章NumPy數(shù)值計(jì)算[示例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]的值沒有被修改Python第二章NumPy數(shù)值計(jì)算[示例2-17]修改數(shù)組形狀print('ravel輸出')d=a.ravel()d[0]=100print(d)print(a)#通過修改d[0]的值,修改了a[0,0]的值Out[]:reshape輸出[[012345][67891011]][[0123][4567][891011]]Python第二章NumPy數(shù)值計(jì)算[示例2-17]修改數(shù)組形狀flatten輸出[1006172839410511][[012345][67891011]]ravel輸出[1001234567891011][[10012345][67891011]]Python第二章NumPy數(shù)值計(jì)算數(shù)組翻轉(zhuǎn)函數(shù)如表2-11所示。表2-11翻轉(zhuǎn)數(shù)組函數(shù)2.2.2翻轉(zhuǎn)數(shù)組函數(shù)描述transpose對(duì)換數(shù)組的維度swapaxes對(duì)換數(shù)組的兩個(gè)軸Python第二章NumPy數(shù)值計(jì)算1.numpy.transpose函數(shù)用于對(duì)換數(shù)組的維度,格式如下所示。numpy.transpose(arr,axes)參數(shù)說明如下所示。arr:要操作的數(shù)組。axes:整數(shù)列表,對(duì)應(yīng)維度,通常所有維度都會(huì)對(duì)換。numpy.ndarray.T類似numpy.transpose。2.2.2翻轉(zhuǎn)數(shù)組Python第二章NumPy數(shù)值計(jì)算2.numpy.swapaxesnumpy.swapaxes函數(shù)用于交換數(shù)組的兩個(gè)軸,格式如下所示。numpy.swapaxes(arr,axis1,axis2)參數(shù)arr:輸入的數(shù)組。axis1:交換軸中的第一個(gè)軸的整數(shù)axis2:交換軸中的第二個(gè)軸的整數(shù)2.2.2翻轉(zhuǎn)數(shù)組Python第二章NumPy數(shù)值計(jì)算[示例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)Python第二章NumPy數(shù)值計(jì)算[示例2-18]翻轉(zhuǎn)數(shù)組Out[]:transpose輸出a=[[012][345]]b=[[03][14][25]]c=[[03][14][25]]swapaxes輸出d=[[03][14][25]]Python第二章NumPy數(shù)值計(jì)算數(shù)組連接函數(shù)如表2-12所示。表2-12數(shù)組連接函數(shù)2.2.3連接數(shù)組函數(shù)描述concatenate連接沿現(xiàn)有軸的數(shù)組序列stack沿著新的軸加入一系列數(shù)組。hstack水平堆疊序列中的數(shù)組(列方向)vstack豎直堆疊序列中的數(shù)組(行方向)Python第二章NumPy數(shù)值計(jì)算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ù)組沿著它來堆疊。2.2.3連接數(shù)組Python第二章NumPy數(shù)值計(jì)算3.numpy.hstacknumpy.hstack是numpy.stack函數(shù)的變體,它通過水平堆疊來生成數(shù)組。4.numpy.vstacknumpy.vstack是numpy.stack函數(shù)的變體,它通過垂直堆疊來生成數(shù)組。2.2.3連接數(shù)組Python第二章NumPy數(shù)值計(jì)算[示例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))Python第二章NumPy數(shù)值計(jì)算[示例2-19]連接數(shù)組print('a=',a)print('b=',b)print('c=',c)print('d=',d)print('e=',e)print('f=',f)print('g=',g)print('h=',h)Out[]:a=[[12][34]]Python第二章NumPy數(shù)值計(jì)算[示例2-19]連接數(shù)組b=[[1112][1314]]c=[[12][34][1112][1314]]d=[[121112][341314]]e=[[12][34][1112][1314]]Python第二章NumPy數(shù)值計(jì)算[示例2-19]連接數(shù)組f=[[131113][241214]]g=[[121112][341314]]h=[[12][34][1112][1314]]Python第二章NumPy數(shù)值計(jì)算分割數(shù)組函數(shù)如表2-13所示。表2-13數(shù)組分割函數(shù)2.2.4分割數(shù)組函數(shù)描述split將一個(gè)數(shù)組分割為多個(gè)子數(shù)組hsplit將一個(gè)數(shù)組水平分割為多個(gè)子數(shù)組(按列)vsplit將一個(gè)數(shù)組垂直分割為多個(gè)子數(shù)組(按行)Python第二章NumPy數(shù)值計(jì)算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.2.4分割數(shù)組Python第二章NumPy數(shù)值計(jì)算2.numpy.hsplitnumpy.hsplit函數(shù)用于水平分割數(shù)組,通過指定要返回的相同形狀的數(shù)組數(shù)量來拆分原數(shù)組。3.numpy.vsplitnumpy.vsplit沿著垂直軸分割,其分割方式與hsplit用法相同。2.2.4分割數(shù)組Python第二章NumPy數(shù)值計(jì)算[示例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)Python第二章NumPy數(shù)值計(jì)算[示例2-20]數(shù)組分割Out[]:a=[[012345][67891011][121314151617][181920212223]]b=[array([[0,1,2,3,4,5],[6,7,8,9,10,11]]),array([[12,13,14,15,16,17],[18,19,20,21,22,23]])]c=[array([[0,1,2,3,4,5],[6,7,8,9,10,11]]),array([[12,13,14,15,16,17]]),array([[18,19,20,21,22,23]])]d=[array([[0,1],Python第二章NumPy數(shù)值計(jì)算[示例2-20]數(shù)組分割[6,7],[12,13],[18,19]]),array([[2,3],[8,9],[14,15],[20,21]]),array([[4,5],[10,11],[16,17],[22,23]])]e=[array([[0,1,2,3,4,5],[6,7,8,9,10,11]]),array([[12,13,14,15,16,17],[18,19,20,21,22,23]])]Python第二章NumPy數(shù)值計(jì)算數(shù)組元素添加和刪除的元素如表2-14所示。表2-14數(shù)組添加和刪除函數(shù)2.2.5數(shù)組元素添加與刪除函數(shù)元素及描述resize返回指定形狀的新數(shù)組append將值添加到數(shù)組末尾insert沿指定軸將值插入到指定下標(biāo)之前delete刪掉某個(gè)軸的子數(shù)組,并返回刪除后的新數(shù)組Python第二章NumPy數(shù)值計(jì)算1.numpy.resizenumpy.resize函數(shù)返回指定大小的新數(shù)組。如果新數(shù)組大小大于原始大小,則包含原始數(shù)組中元素的副本。函數(shù)resize格式如下所示。numpy.resize(arr,shape)參數(shù)arr:要修改大小的數(shù)組。shape:返回?cái)?shù)組的新形狀。2.2.5數(shù)組元素添加與刪除Python第二章NumPy數(shù)值計(jì)算2.numpy.appendnumpy.append函數(shù)在數(shù)組的末尾添加值。追加操作會(huì)分配整個(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ù)要相同)。2.2.5數(shù)組元素添加與刪除Python第二章NumPy數(shù)值計(jì)算3.numpy.insertnumpy.insert函數(shù)在給定索引之前,沿給定軸在輸入數(shù)組中插入值。numpy.insert(arr,obj,values,axis)參數(shù)說arr:輸入數(shù)組。obj:在其之前插入值的索引。values:要插入的值。axis:沿著它插入的軸,如果未提供,則輸入數(shù)組會(huì)被展開。2.2.5數(shù)組元素添加與刪除Python第二章NumPy數(shù)值計(jì)算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ù)組會(huì)被展開。2.2.5數(shù)組元素添加與刪除Python第二章NumPy數(shù)值計(jì)算[示例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)Python第二章NumPy數(shù)值計(jì)算[示例2-21]數(shù)組元素的添加與刪除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ù)Python第二章NumPy數(shù)值計(jì)算[示例2-21]數(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)Out[]:a=[[01][23]]一行四列a=[[0123]]四行一列a=[[0][1][2][3]]Python第二章NumPy數(shù)值計(jì)算[示例2-21]數(shù)組元素的添加與刪除數(shù)組b=[[01][23][45]]append的c=[01234567]append后的d=[[01][23][45][1112]]append后的e=[[01100200][23300400][45500600]]f=[01112345]h=[[01][23]Python第二章NumPy數(shù)值計(jì)算[示例2-21]數(shù)組元素的添加與刪除[1010][45]]i=[[0101][2103][4105]]j=[[0][2][4]]k=[[01][23][45]]l=[012345]數(shù)組索引與切片2.3Python第二章NumPy數(shù)值計(jì)算Python第二章NumPy數(shù)值計(jì)算ndarray對(duì)象的內(nèi)容可以通過索引或切片來訪問和修改,與Python中列表的切片操作一樣。Python第二章NumPy數(shù)值計(jì)算一維NumPy數(shù)組的索引與Python列表的索引相同;二維數(shù)組的索引在單個(gè)或多個(gè)軸向上完成,在某一軸上與一維數(shù)組索引相同。2.3.1數(shù)組索引Python第二章NumPy數(shù)值計(jì)算[示例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.]Python第二章NumPy數(shù)值計(jì)算[示例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)Out[]:Python第二章NumPy數(shù)值計(jì)算[示例2-23]二維數(shù)組索引a=[[0123][4567][891011]]a[0]=[0123],a[2]=[891011]a[0,0]=0,a[0][0]=0,a[1,2]=6,a[1][2]=6a[0]值已修改[[10101010][4567][891011]]a[1]值已修改[[10101010][100100100100][891011]]Python第二章NumPy數(shù)值計(jì)算[示例2-23]二維數(shù)組索引a=[[0123][4567][891011]]a[0]=[0123],a[2]=[891011]a[0,0]=0,a[0][0]=0,a[1,2]=6,a[1][2]=6a[0]值已修改[[10101010][4567][891011]]a[1]值已修改[[10101010][100100100100][891011]]a[2,0]值已修改[[10101010][100100100100][100091011]]Python第二章NumPy數(shù)值計(jì)算一維數(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ù)組就會(huì)按照0軸方向進(jìn)行切片。2.3.2數(shù)組切片Python第二章NumPy數(shù)值計(jì)算[示例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]Python第二章NumPy數(shù)值計(jì)算[示例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[:])Out[]:a=[[0123][4567][891011]]a[0:2][1:3]=[[4567]],a[2:][:2]=[]a[0:2]=[[0123][4567]]Python第二章NumPy數(shù)值計(jì)算[示例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[:])Out[]:a=[[0123][4567][891011]]a[0:2][1:3]=[[4567]],a[2:][:2]=[]a[0:2]=[[0123][4567]]a[:]=[[0123][4567][891011]]Python第二章NumPy數(shù)值計(jì)算布爾型索引是指使用布爾數(shù)組來索引目標(biāo)數(shù)組,以此找出與布爾數(shù)組中值為True的對(duì)應(yīng)的目標(biāo)數(shù)組中的數(shù)據(jù)。注意:布爾數(shù)組的長度必須與目標(biāo)數(shù)組對(duì)應(yīng)的軸的長度一致。2.3.3布爾型索引Python第二章NumPy數(shù)值計(jì)算[示例2-26]布爾索引In

[]:importnumpyasnpfromnumpy.randomimportrandn#用來生成一些正態(tài)分布的隨機(jī)數(shù)據(jù)names=np.array(['張','王','李','趙','上官','公孫'])#儲(chǔ)存姓名的數(shù)組data=randn(6,3)#生成含隨機(jī)值的數(shù)組print(data)print('上官對(duì)應(yīng)的行:',data[names=='上官'])Out[]:[[1.10113051-0.475449-0.35505678][0.69312436-1.348625140.40442378][1.21908475-2.37707636-1.30860339][-0.24155704-1.321191840.88924138][0.447876080.17181889-0.11584933][0.24696786-0.06049758-2.53335844]]Python第二章NumPy數(shù)值計(jì)算[示例2-26]布爾索引上官對(duì)應(yīng)的行:[[0.447876080.17181889-0.11584933]]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]Python第二章NumPy數(shù)值計(jì)算花式索引是可以通過整數(shù)列表或數(shù)組進(jìn)行索引,也可以使用np.ix_函數(shù)完成同樣的操作。2.3.4花式索引Python第二章NumPy數(shù)值計(jì)算[示例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])])Out[]:花式索引1:[[0123][12131415]]花式索引2:[[02][810][1214]]Python第二章NumPy數(shù)值計(jì)算[示例2-27]花式索引ix=(array([[0],[2],[3]]),array([[0,2]]))花式索引3:[[02][810][1214]]數(shù)組的運(yùn)算2.4Python第二章NumPy數(shù)值計(jì)算Python第二章NumPy數(shù)值計(jì)算數(shù)組的運(yùn)算支持向量化運(yùn)算,并且比Python具有更快的運(yùn)算速度Python第二章NumPy數(shù)值計(jì)算數(shù)組與標(biāo)量的算術(shù)運(yùn)算,以及相同維度的數(shù)組的算術(shù)運(yùn)算都是直接應(yīng)用到元素中,也就是元素級(jí)運(yùn)算。2.4.1數(shù)組和標(biāo)量間的運(yùn)算Python第二章NumPy數(shù)值計(jì)算[示例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]Python第二章NumPy數(shù)值計(jì)算[示例2-28]數(shù)組和標(biāo)量運(yùn)算c=[[012][345]]d=[[0100200][300400500]]e=[01491625]Python第二章NumPy數(shù)值計(jì)算廣播是指NumPy在算術(shù)運(yùn)算期間處理不同形狀的數(shù)組的能力。對(duì)數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。如果兩個(gè)陣列具有完全相同的形狀,則這些操作可被無縫執(zhí)行。如果兩個(gè)數(shù)組的維數(shù)不相同,則元素到元素的操作是不可能的。然而,在NumPy中仍然可以對(duì)形狀不相似的數(shù)組進(jìn)行操作,因?yàn)樗鼡碛袕V播功能。較小的數(shù)組會(huì)被廣播到較大數(shù)組的大小,以便使它們的形狀可兼容。如果上述規(guī)則產(chǎn)生有效結(jié)果,并且滿足以下條件之一,那么數(shù)組被稱為可廣播的。1.數(shù)組擁有相同形狀。2.數(shù)組擁有相同的維數(shù),每個(gè)維度擁有相同長度,或者長度為1。3.數(shù)組擁有極少的維度,可以在其前面追加長度為1的維度,使上述條件成立。2.4.2廣播Python第二章NumPy數(shù)值計(jì)算[示例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]]Python第二章NumPy數(shù)值計(jì)算算術(shù)運(yùn)算的一目函數(shù)如表2-15所示表2-15一目數(shù)學(xué)函數(shù)2.4.3算數(shù)函數(shù)函數(shù)描述用法absfabs計(jì)算整型/浮點(diǎn)/復(fù)數(shù)的絕對(duì)值對(duì)于沒有復(fù)數(shù)的快速版本求絕對(duì)值np.abs()np.fabs()sqrt計(jì)算元素的平方根。等價(jià)于array**0.5np.sqrt()square計(jì)算元素的平方。等價(jià)于array**2np.squart()exp計(jì)算以自然常數(shù)e為底的冪次方np.exp()Loglog10log2log1p自然對(duì)數(shù)(e)基于10的對(duì)數(shù)基于2的對(duì)數(shù)基于log(1+x)的對(duì)數(shù)np.log()np.log10()np.log2()np.log1p()sign計(jì)算元素的符號(hào):1:正數(shù)0:0-1:負(fù)數(shù)np.sign()ceil計(jì)算大于或等于元素的最小整數(shù)np.ceil()floor計(jì)算小于或等于元素的最大整數(shù)np.floor()around四舍五入到給定的小數(shù)位np.around()rint對(duì)浮點(diǎn)數(shù)取整到最近的整數(shù),但不改變浮點(diǎn)數(shù)類型np.rint()modf分別返回浮點(diǎn)數(shù)的整數(shù)和小數(shù)部分的數(shù)組np.modf()isnan返回布爾數(shù)組標(biāo)識(shí)哪些元素是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à)于‘&’‘|’‘!’‘^’Python第二章NumPy數(shù)值計(jì)算Numpy數(shù)學(xué)運(yùn)算的二目函數(shù)入保2-16所示。表2-16二目數(shù)學(xué)函數(shù)Numpy數(shù)學(xué)運(yùn)算的二目函數(shù)入保2-16所示。表2-16二目數(shù)學(xué)函數(shù)2.4.3算數(shù)函數(shù)函數(shù)描述用法add數(shù)組對(duì)應(yīng)元素相加np.add(A,B)substract數(shù)組對(duì)應(yīng)元素相減np.substract(A,B)dotmultiply*dot是是叉積,數(shù)組和矩陣對(duì)應(yīng)位置相乘multiply是點(diǎn)積,矩陣對(duì)應(yīng)位置相乘,要求矩陣維度相同*是點(diǎn)積,對(duì)數(shù)組執(zhí)行對(duì)應(yīng)位置相乘,必要時(shí)使用廣播規(guī)則

divide=/true_dividefloor_divide=//數(shù)組對(duì)應(yīng)元素相除地板除

mod,remainder,fmod模運(yùn)算

power使用第二個(gè)數(shù)組作為指數(shù),計(jì)算第一個(gè)數(shù)組中的元素np.power(A,B)Python第二章NumPy數(shù)值計(jì)算Numpy數(shù)學(xué)運(yùn)算的二目函數(shù)入保2-16所示。表2-16二目數(shù)學(xué)函數(shù)2.4.3算數(shù)函數(shù)maximum兩數(shù)組對(duì)應(yīng)元素比大小取其大者,返回一個(gè)數(shù)組np.maximum:(X,Y,out=None)minimun兩數(shù)組對(duì)應(yīng)元素比大小取其小者

copysign將第二個(gè)數(shù)組中各元素的符號(hào)賦值給第一個(gè)數(shù)組的對(duì)應(yīng)元素

greater,greater_equal,less,less_equal,equal,not_equal基于元素的比較,產(chǎn)生布爾數(shù)組。等價(jià)于>,>=,<,<=,==,!=Python第二章NumPy數(shù)值計(jì)算[示例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)化為角度Python第二章NumPy數(shù)值計(jì)算[示例2-30]三角函數(shù)與反三角函數(shù)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.]Python第二章NumPy數(shù)值計(jì)算[示例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.]Python第二章NumPy數(shù)值計(jì)算[示例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]Python第二章NumPy數(shù)值計(jì)算[示例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后的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論