人工智能基礎(chǔ)(Python實(shí)現(xiàn))-課件 第3章 Numpy數(shù)值分析庫(kù)_第1頁(yè)
人工智能基礎(chǔ)(Python實(shí)現(xiàn))-課件 第3章 Numpy數(shù)值分析庫(kù)_第2頁(yè)
人工智能基礎(chǔ)(Python實(shí)現(xiàn))-課件 第3章 Numpy數(shù)值分析庫(kù)_第3頁(yè)
人工智能基礎(chǔ)(Python實(shí)現(xiàn))-課件 第3章 Numpy數(shù)值分析庫(kù)_第4頁(yè)
人工智能基礎(chǔ)(Python實(shí)現(xiàn))-課件 第3章 Numpy數(shù)值分析庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章

Numpy數(shù)值分析庫(kù)本章學(xué)習(xí)目標(biāo)01了解Numpy數(shù)值分析庫(kù)的基本概念,以及數(shù)組對(duì)象、數(shù)據(jù)類型和廣播機(jī)制。03熟悉Numpy中的索引、切片和布爾索引技術(shù),以及如何進(jìn)行數(shù)組的排序和元素篩選。05學(xué)習(xí)Numpy中聚合函數(shù)和逐元素操作函數(shù)的使用,以及如何進(jìn)行數(shù)組的統(tǒng)計(jì)分析和數(shù)學(xué)變換。02掌握利用Numpy進(jìn)行數(shù)組創(chuàng)建、操作和數(shù)學(xué)計(jì)算的基礎(chǔ)理論及編程實(shí)現(xiàn)。04理解Numpy中特殊數(shù)值(如NaN和Inf)的概念和處理方法,以及它們?cè)跀?shù)值計(jì)算中的影響。06培養(yǎng)使用Numpy解決實(shí)際科學(xué)計(jì)算問(wèn)題的能力。目錄3.2Numpy數(shù)據(jù)類型3.3Numpy數(shù)組廣播機(jī)制3.4特殊數(shù)值處理3.1Numpy數(shù)組創(chuàng)建與操作3.1Numpy數(shù)組創(chuàng)建與操作

Numpy數(shù)組基本操作3.1.3Numpy函數(shù)3.1.4Numpy數(shù)組創(chuàng)建3.1.1Numpy數(shù)組屬性3.1.23.1Numpy數(shù)組創(chuàng)建與操作importnumpyasnp導(dǎo)入慣例如下:01對(duì)于一維數(shù)組,只有一個(gè)軸,這條軸通常稱為軸0,它沿著數(shù)組的長(zhǎng)度方向操作。對(duì)于二維數(shù)組,有兩個(gè)軸:軸0和軸1,軸0是沿著行的方向,軸1是沿著列的方向。數(shù)組的軸023.1.1Numpy數(shù)組創(chuàng)建1.使用np.array()方法實(shí)例演示使用np.array()方法將現(xiàn)有的列表或元組轉(zhuǎn)換為NumPy數(shù)組。當(dāng)array()方法的參數(shù)是一維列表或者元組時(shí),創(chuàng)建的是一維數(shù)組。當(dāng)array()方法的參數(shù)是二維列表或者元組時(shí),創(chuàng)建的是二維數(shù)組??梢酝ㄟ^(guò)數(shù)組對(duì)象的ndim屬性查看數(shù)組的維度。In:a=np.array([1,2,3,4])aOut:array([1,2,3,4])#一維列表轉(zhuǎn)成一維數(shù)組In:b=np.array([[1,2,3],[4,5,6]])bOut:array([[1,2,3],[4,5,6]])#二維列表轉(zhuǎn)成二維數(shù)組In:a.ndimOut:1In:b.ndimOut:23.1.1Numpy數(shù)組創(chuàng)建2.使用np.arange()方法實(shí)例演示arange()方法的用法與Python內(nèi)置函數(shù)range()的用法相同,需要3個(gè)參數(shù)start、stop、step。不同之處在于,arange()方法生成的是一個(gè)numpy數(shù)組。結(jié)合arange()方法和數(shù)組對(duì)象的reshape()方法可以靈活創(chuàng)建各種維度和形狀的數(shù)組。In:c=np.arange(0,10,2)cOut:array([0,2,4,6,8])In:d=np.arange(12).reshape((2,6))Out:array([[0,1,2,3,4,5],[6,7,8,9,10,11]])In:a=np.arange(12).reshape(2,-1)#維度大小為-1Out:array([[0,1,2,3,4,5],[6,7,8,9,10,11]])3.1.1Numpy數(shù)組創(chuàng)建3.生成隨機(jī)數(shù)組實(shí)例演示用法:np.random.randint(x,y,size):生成[x,y)范圍內(nèi)的形狀為size的隨機(jī)整數(shù)數(shù)組。In:np.random.randint(1,10)#未指定size參數(shù),生成一個(gè)隨機(jī)整數(shù)Out:2In:np.random.randint(1,10,size=(5,))#生成一維數(shù)組Out:array([6,1,2,7,8])In:np.random.randint(1,10,size=(2,5))生成二維數(shù)組Out:array([[3,8,3,3,8],[3,7,5,8,2]])3.1.1Numpy數(shù)組創(chuàng)建3.生成隨機(jī)數(shù)組實(shí)例演示用法:np.random.rand(shape):生成[0,1)范圍內(nèi)均勻分布的隨機(jī)數(shù)數(shù)組,數(shù)組的形狀通過(guò)參數(shù)數(shù)量指定。In:np.random.rand()#未指定參數(shù),生成一個(gè)隨機(jī)小數(shù)Out:0.45799666392103In:np.random.rand(3)#指定一個(gè)參數(shù),生成一個(gè)一維數(shù)組Out:array([0.46840468,0.22441032,0.7115226])In:np.random.rand(2,4)#指定兩個(gè)參數(shù),生成一個(gè)二維數(shù)組Out:array([[0.48789605,0.62403898,0.09199842,0.62880645],[0.88644542,0.90503952,0.00590543,0.65129496]])3.1.2Numpy數(shù)組屬性實(shí)例演示數(shù)組的常用屬性如表3-1所示In:a=np.arange(8).reshape(2,4)a.ndimOut:2In:a.sizeOut:8In:a.shapeOut:(2,4)In:a.dtypeIn:dtype('int32')In:a.TOut:array([[0,4],[1,5],[2,6],[3,7]])3.1.2Numpy數(shù)組屬性實(shí)例演示一維數(shù)組的轉(zhuǎn)置還是一維數(shù)組。In:a=np.arange(4)aOut:array([0,1,2,3])In:a.TOut:array([0,1,2,3])3.1.3Numpy數(shù)組基本操作實(shí)例演示通過(guò)索引訪問(wèn)數(shù)組元素的方法與Python訪問(wèn)可迭代對(duì)象的方法相同,有正索引和負(fù)索引兩種。In:a=np.arange(8).reshape(2,4)a[0][-1]Out:31.索引3.1.3Numpy數(shù)組基本操作實(shí)例演示Numpy數(shù)組的切片與Python可迭代對(duì)象切片有以下不同之處。(1)對(duì)于二維及以上,Numpy數(shù)組對(duì)每個(gè)軸都可以切片。In:a=np.arange(12).reshape(3,4)aOut:array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])In:a[1:3]#按行切片Out:array([[4,5,6,7],[8,9,10,11]])In:a[:,1:3]#按列切片,用冒號(hào)指定所有行Out:array([[1,2],[5,6],[9,10]])In:a[1:3,1:3]#同時(shí)對(duì)行和列切片Out:array([[5,6],[9,10]])In:a[1,2]#切片可以簡(jiǎn)化為對(duì)一個(gè)元素的訪問(wèn)Out:62.切片3.1.3Numpy數(shù)組基本操作實(shí)例演示Numpy數(shù)組的切片與Python可迭代對(duì)象切片有以下不同之處。(2)支持布爾索引??梢杂靡粋€(gè)元素是布爾值的數(shù)組或列表對(duì)數(shù)組進(jìn)行索引,選出索引值為真的數(shù)組元素,生成一個(gè)新數(shù)組。通過(guò)布爾索引,選出數(shù)組中滿足運(yùn)算條件的元素In:a=np.arange(6)b=[True,False,True,True,False,True]c=a[b]#用元素是布爾值的列表進(jìn)行索引cOut:array([0,2,3,5])#選出索引值為真的元素In:d=np.array([True,False,True,False,False,True])e=a[d]#用元素是布爾值的數(shù)組進(jìn)行索引eOut:array([0,2,5])2.切片In:a=np.arange(6)aOut:array([0,1,2,3,4,5])In:a[a>3]#用數(shù)組運(yùn)算進(jìn)行布爾索引,選出大于3的數(shù)組元素Out:array([4,5])3.1.3Numpy數(shù)組基本操作實(shí)例演示Numpy數(shù)組的切片與Python可迭代對(duì)象切片有以下不同之處。(3)numpy引入了視圖概念:視圖是指共享相同數(shù)據(jù)的不同數(shù)組對(duì)象。作用:避免了不必要的數(shù)據(jù)復(fù)制,節(jié)省了內(nèi)存。效果:對(duì)視圖中元素的修改會(huì)直接影響到原數(shù)組,反之亦然。In:a=np.arange(6)aOut:array([0,1,2,3,4,5])In:b=a[1:4]#對(duì)a切片的結(jié)果為數(shù)組bbOut:array([1,2,3])In:b[0]=-1#改變數(shù)組b的索引為0的元素值bOut:array([-1,2,3])In:a#數(shù)組a的相應(yīng)元素發(fā)生了改變Out:array([0,-1,2,3,4,5])2.切片盡管數(shù)組b是同原數(shù)組切片產(chǎn)生的視圖,視圖與原數(shù)組共享數(shù)據(jù),但它們?nèi)允仟?dú)立的對(duì)象。各自有自己的維度、形狀、大小等屬性。3.1.3Numpy數(shù)組基本操作實(shí)例演示數(shù)組的運(yùn)算包括數(shù)組與數(shù)的運(yùn)算,以及數(shù)組與數(shù)組的運(yùn)算。數(shù)組與數(shù)進(jìn)行運(yùn)算時(shí),數(shù)組的每一個(gè)元素會(huì)與數(shù)進(jìn)行運(yùn)算,運(yùn)算結(jié)果會(huì)保存到一個(gè)新數(shù)組,原數(shù)組保持不變。數(shù)組也可以與數(shù)進(jìn)行比較運(yùn)算,結(jié)果是一個(gè)布爾數(shù)組。數(shù)組與數(shù)組運(yùn)算要求兩數(shù)組形狀相同,對(duì)應(yīng)位置上的元素之間會(huì)執(zhí)行相應(yīng)的運(yùn)算。In:a=np.arange(6)b=a+3aOut:array([0,1,2,3,4,5])In:bOut:array([3,4,5,6,7,8])3.運(yùn)算In:c=a>3cOut:array([False,False,False,False,True,True])In:a=np.arange(1,4)b=np.arange(4,7)a*bOut:array([4,10,18])In:a<bOut:array([True,True,True])3.1.4Numpy函數(shù)實(shí)例演示一種是numpy模塊的函數(shù):np.函數(shù)名()另一種是numpy數(shù)組的成員函數(shù):數(shù)組對(duì)象.函數(shù)名()有一些函數(shù)(如reshape())既是numpy模塊的函數(shù),又是數(shù)組的成員函數(shù),可以通過(guò)兩種方式使用。In:a=np.arange(8)b=np.reshape(a,(2,4))#調(diào)用numpy模塊的函數(shù),傳入?yún)?shù)ac=a.reshape(2,4)#調(diào)用數(shù)組a的成員函數(shù),無(wú)須傳參數(shù)使用形式3.1.4Numpy函數(shù)實(shí)例演示用于對(duì)數(shù)組a進(jìn)行原地排序,即直接修改數(shù)組本身,使其元素按照升序排列。In:a=np.random.randint(1,50,size=(6))aOut:array([40,7,8,48,13,49])In:a.sort()In:aOut:array([7,8,13,40,48,49])sort()函數(shù)Numpy數(shù)組沒(méi)有降序排序的功能。如要實(shí)現(xiàn)降序排序,可以按照如下的方法進(jìn)行In:a=np.random.randint(1,50,size=(6))a.sort()a=a[::-1]aOut:array([48,45,45,34,14,7])3.1.4Numpy函數(shù)實(shí)例演示如果要對(duì)二維及以上的數(shù)組排序,需要用axis參數(shù)指定排序的軸。In:a=np.random.randint(1,50,size=(12)).reshape(3,4)a.sort(axis=1)#按軸1排序,在水平方向上排序aOut:array([[17,21,23,29],[9,17,21,28],[6,18,37,44]])In:a=np.random.randint(1,50,size=(12)).reshape(3,4)a.sort(axis=0)#按軸0排序,在豎直方向上排序aOut:array([[1,18,31,2],[18,23,32,13],[32,32,47,39]])sort()函數(shù)3.1.4Numpy函數(shù)實(shí)例演示Numpy用于計(jì)算的函數(shù)有兩類。逐元素操作的函數(shù),對(duì)數(shù)組中的每個(gè)元素分別計(jì)算,返回一個(gè)新數(shù)組。這類函數(shù)不會(huì)改變數(shù)組的整體結(jié)構(gòu),而是對(duì)其中每個(gè)元素單獨(dú)進(jìn)行計(jì)算,如sqrt、sin、cos等。In:a=np.array((4,9,16,25)).reshape(2,2)np.sqrt(a)#對(duì)數(shù)組的每一個(gè)元素求平方根Out:array([[2.,3.],[4.,5.]])用于計(jì)算的函數(shù)3.1.4Numpy函數(shù)實(shí)例演示Numpy用于計(jì)算的函數(shù)有兩類。聚合操作,用于將數(shù)組中的所有元素進(jìn)行計(jì)算,返回一個(gè)標(biāo)量或指定軸上的累計(jì)結(jié)果。它可以對(duì)整個(gè)數(shù)組或特定軸進(jìn)行操作,改變數(shù)組的維度,如sum、max等。In:a=np.array((4,9,16,25)).reshape(2,2)np.sqrt(a)Out:array([[2.,3.],[4.,5.]])In:a=np.random.randint(1,10,size=(3,4))aOut:array([[4,4,5,2],[5,4,2,7],[8,8,4,9]])In:a.sum()#未指定參數(shù),對(duì)所有元素求和,結(jié)果為一個(gè)數(shù)Out:62In:a.sum(axis=0)#指定軸0,按列求和,結(jié)果為一個(gè)一維數(shù)組Out:array([17,16,11,18])In:a.sum(axis=1)#指定軸1,按行求和,結(jié)果為一個(gè)一維數(shù)組Out:array([15,18,29])用于計(jì)算的函數(shù)3.1.4Numpy函數(shù)實(shí)例演示dot()函數(shù)用于計(jì)算兩個(gè)數(shù)組的點(diǎn)積。對(duì)于一維數(shù)組,它返回向量的點(diǎn)積;對(duì)于二維數(shù)組(如矩陣),它返回矩陣乘積。二維數(shù)組與一維數(shù)組進(jìn)行點(diǎn)積是二維數(shù)組的每一行與一維數(shù)組進(jìn)行點(diǎn)積,其結(jié)果是一維數(shù)組。In:a=np.array([1,2,3])b=np.array([4,5,6])result=np.dot(a,b)resultOut:32dot()函數(shù)In:a=np.arange(6).reshape(3,2)b=np.arange(3,5)result=np.dot(a,b)resultOut[20]:array([4,18,32])3.1.4Numpy函數(shù)實(shí)例演示二維數(shù)組與二維數(shù)組進(jìn)行點(diǎn)積,要求第一個(gè)數(shù)組的列數(shù)等于第二個(gè)數(shù)組的行數(shù)。In:a=np.arange(6).reshape(3,2)b=np.arange(3,9).reshape(2,3)result=np.dot(a,b)resultOut:array([[678][242934][425160]])dot()函數(shù)3.1.4Numpy函數(shù)實(shí)例演示where()函數(shù)用于根據(jù)條件篩選或生成數(shù)組,有兩種用法:條件篩選:numpy.where(condition)參數(shù):條件,常用比較運(yùn)算表示功能:返回滿足條件的元素的索引,常用于找出數(shù)組中符合條件的位置。In:a=np.array([12,21,32,14,36])b=np.where(a>20)Out:(array([1,2,4],dtype=int64),)#返回滿足條件的索引where()函數(shù)3.1.4Numpy函數(shù)實(shí)例演示where()函數(shù)用于根據(jù)條件篩選或生成數(shù)組,有兩種用法:條件賦值:numpy.where(condition,x,y)參數(shù):條件,兩個(gè)數(shù)組功能:根據(jù)給定的條件返回?cái)?shù)組。當(dāng)條件為真時(shí)返回x對(duì)應(yīng)的值,否則返回y對(duì)應(yīng)的值,要求x和y與原數(shù)組的形狀相同。In:a=np.array([12,21,32,14,36])b=a*2c=a//2d=np.where(a>20,b,c)#第2和第3個(gè)參數(shù)都是數(shù)組Out:array([6,42,64,7,72])

#數(shù)組a第一個(gè)元素不滿足>20的條件,故d的第一個(gè)元素是c的第一個(gè)元素,其余的依此類推。where()函數(shù)3.2Numpy數(shù)據(jù)類型3.2.1Numpy數(shù)據(jù)類型概述3.2.2Numpy數(shù)據(jù)類型轉(zhuǎn)換3.2.1Numpy數(shù)據(jù)類型概述實(shí)例演示常用的數(shù)據(jù)類型有:整數(shù)類型(int8,int16,int32,int64)無(wú)符號(hào)整數(shù)類型(uint8,uint16,uint32,uint64)浮點(diǎn)數(shù)類型(float16,float32,float64)復(fù)數(shù)類型(complex64)如果創(chuàng)建數(shù)組時(shí)不指定數(shù)據(jù)類型,將由系統(tǒng)自動(dòng)確定數(shù)據(jù)類型。也可以通過(guò)參數(shù)dtype指定數(shù)據(jù)類型。In:a=np.arange(6)a.dtypeOut:dtype('int32')In:b=np.random.rand(3)b.dtypeOut:dtype('float64')In:a=np.arange(6,dtype=16)a.dtypeOut:dtype('int16')In:b=np.array([1.1,2.3,3.4],dtype=np.float32)b.dtypeOut:dtype('float32')3.2.2Numpy數(shù)據(jù)類型轉(zhuǎn)換實(shí)例演示astype()方法用于將數(shù)組的元素類型轉(zhuǎn)換為指定的類型,并返回一個(gè)新的數(shù)組,而不改變?cè)瓟?shù)組。astype()方法可以將數(shù)組從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種。當(dāng)從高精度類型轉(zhuǎn)換為低精度類型時(shí)(如float64轉(zhuǎn)int32),可能會(huì)丟失數(shù)據(jù)的精度,需要慎重對(duì)待。In:a=np.arange(6)a.dtypeOut:dtype('int32')In:b=a.astype(16)#改變a的數(shù)據(jù)類型,并創(chuàng)建新數(shù)組b.dtypeOut:dtype('int16')In:a=np.random.rand(4)a.dtypeOut:dtype('float64')In:b=a.astype(np.float32)#改變a的數(shù)據(jù)類型,并創(chuàng)建新數(shù)組b.dtypeOut:dtype('float32')3.3Numpy數(shù)組廣播機(jī)制使兩個(gè)數(shù)組的維數(shù)相同,且各維度的長(zhǎng)度相同用于處理不同形狀數(shù)組之間運(yùn)算機(jī)理功能3.3Numpy數(shù)組廣播機(jī)制如果兩個(gè)數(shù)組的維數(shù)不同,在維數(shù)較小的數(shù)組前面補(bǔ)1,直到兩個(gè)數(shù)組的維數(shù)相同。規(guī)則一從左到右逐維檢查兩個(gè)數(shù)組的長(zhǎng)度,如果長(zhǎng)度不同且有一個(gè)長(zhǎng)度為1,則擴(kuò)充長(zhǎng)度為1的維度,直到兩個(gè)數(shù)組相等;如果長(zhǎng)度不同且都不為1,則不能擴(kuò)充。規(guī)則二實(shí)例演示In:a=np.arange(6).reshape(3,2)aOut:array([[0,1],[2,3],[4,5]])In:b=np.arange(1,3)bOut:array([1,2])【例3-1】形狀為(3,2)的數(shù)組a與形狀為(2,)的數(shù)組b的運(yùn)算a+b。a的形狀為(3,2),b的形狀為(2,)首先按照規(guī)則一,把數(shù)組b的形狀擴(kuò)充為(1,2)。然后按照規(guī)則二,將它擴(kuò)充為3,數(shù)組b的形狀變?yōu)?3,2)。至此,兩個(gè)數(shù)組維數(shù)相同,形狀相同,可以進(jìn)行運(yùn)算。In:a+bOut:array([[1,3],[3,5],[5,7]])實(shí)例演示In:a=np.arange(6).reshape(2,3)aOut:array([[0,1,2],[3,4,5]])In:b=np.arange(1,3).reshape(2,1)bOut:array([[1],[2]])【例3-2】形狀為(2,3)的數(shù)組a與形狀為(2,1)的數(shù)組b的運(yùn)算a+b。數(shù)組a和b都是二維數(shù)組,維數(shù)相同,無(wú)須擴(kuò)充。兩個(gè)數(shù)組的第一維長(zhǎng)度都是2,無(wú)須擴(kuò)充。數(shù)組a的第二維長(zhǎng)度為3,數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論