




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章
Numpy數值分析庫本章學習目標01了解Numpy數值分析庫的基本概念,以及數組對象、數據類型和廣播機制。03熟悉Numpy中的索引、切片和布爾索引技術,以及如何進行數組的排序和元素篩選。05學習Numpy中聚合函數和逐元素操作函數的使用,以及如何進行數組的統計分析和數學變換。02掌握利用Numpy進行數組創建、操作和數學計算的基礎理論及編程實現。04理解Numpy中特殊數值(如NaN和Inf)的概念和處理方法,以及它們在數值計算中的影響。06培養使用Numpy解決實際科學計算問題的能力。目錄3.2Numpy數據類型3.3Numpy數組廣播機制3.4特殊數值處理3.1Numpy數組創建與操作3.1Numpy數組創建與操作
Numpy數組基本操作3.1.3Numpy函數3.1.4Numpy數組創建3.1.1Numpy數組屬性3.1.23.1Numpy數組創建與操作importnumpyasnp導入慣例如下:01對于一維數組,只有一個軸,這條軸通常稱為軸0,它沿著數組的長度方向操作。對于二維數組,有兩個軸:軸0和軸1,軸0是沿著行的方向,軸1是沿著列的方向。數組的軸023.1.1Numpy數組創建1.使用np.array()方法實例演示使用np.array()方法將現有的列表或元組轉換為NumPy數組。當array()方法的參數是一維列表或者元組時,創建的是一維數組。當array()方法的參數是二維列表或者元組時,創建的是二維數組。可以通過數組對象的ndim屬性查看數組的維度。In:a=np.array([1,2,3,4])aOut:array([1,2,3,4])#一維列表轉成一維數組In:b=np.array([[1,2,3],[4,5,6]])bOut:array([[1,2,3],[4,5,6]])#二維列表轉成二維數組In:a.ndimOut:1In:b.ndimOut:23.1.1Numpy數組創建2.使用np.arange()方法實例演示arange()方法的用法與Python內置函數range()的用法相同,需要3個參數start、stop、step。不同之處在于,arange()方法生成的是一個numpy數組。結合arange()方法和數組對象的reshape()方法可以靈活創建各種維度和形狀的數組。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數組創建3.生成隨機數組實例演示用法:np.random.randint(x,y,size):生成[x,y)范圍內的形狀為size的隨機整數數組。In:np.random.randint(1,10)#未指定size參數,生成一個隨機整數Out:2In:np.random.randint(1,10,size=(5,))#生成一維數組Out:array([6,1,2,7,8])In:np.random.randint(1,10,size=(2,5))生成二維數組Out:array([[3,8,3,3,8],[3,7,5,8,2]])3.1.1Numpy數組創建3.生成隨機數組實例演示用法:np.random.rand(shape):生成[0,1)范圍內均勻分布的隨機數數組,數組的形狀通過參數數量指定。In:np.random.rand()#未指定參數,生成一個隨機小數Out:0.45799666392103In:np.random.rand(3)#指定一個參數,生成一個一維數組Out:array([0.46840468,0.22441032,0.7115226])In:np.random.rand(2,4)#指定兩個參數,生成一個二維數組Out:array([[0.48789605,0.62403898,0.09199842,0.62880645],[0.88644542,0.90503952,0.00590543,0.65129496]])3.1.2Numpy數組屬性實例演示數組的常用屬性如表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數組屬性實例演示一維數組的轉置還是一維數組。In:a=np.arange(4)aOut:array([0,1,2,3])In:a.TOut:array([0,1,2,3])3.1.3Numpy數組基本操作實例演示通過索引訪問數組元素的方法與Python訪問可迭代對象的方法相同,有正索引和負索引兩種。In:a=np.arange(8).reshape(2,4)a[0][-1]Out:31.索引3.1.3Numpy數組基本操作實例演示Numpy數組的切片與Python可迭代對象切片有以下不同之處。(1)對于二維及以上,Numpy數組對每個軸都可以切片。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]#按列切片,用冒號指定所有行Out:array([[1,2],[5,6],[9,10]])In:a[1:3,1:3]#同時對行和列切片Out:array([[5,6],[9,10]])In:a[1,2]#切片可以簡化為對一個元素的訪問Out:62.切片3.1.3Numpy數組基本操作實例演示Numpy數組的切片與Python可迭代對象切片有以下不同之處。(2)支持布爾索引。可以用一個元素是布爾值的數組或列表對數組進行索引,選出索引值為真的數組元素,生成一個新數組。通過布爾索引,選出數組中滿足運算條件的元素In:a=np.arange(6)b=[True,False,True,True,False,True]c=a[b]#用元素是布爾值的列表進行索引cOut:array([0,2,3,5])#選出索引值為真的元素In:d=np.array([True,False,True,False,False,True])e=a[d]#用元素是布爾值的數組進行索引eOut:array([0,2,5])2.切片In:a=np.arange(6)aOut:array([0,1,2,3,4,5])In:a[a>3]#用數組運算進行布爾索引,選出大于3的數組元素Out:array([4,5])3.1.3Numpy數組基本操作實例演示Numpy數組的切片與Python可迭代對象切片有以下不同之處。(3)numpy引入了視圖概念:視圖是指共享相同數據的不同數組對象。作用:避免了不必要的數據復制,節省了內存。效果:對視圖中元素的修改會直接影響到原數組,反之亦然。In:a=np.arange(6)aOut:array([0,1,2,3,4,5])In:b=a[1:4]#對a切片的結果為數組bbOut:array([1,2,3])In:b[0]=-1#改變數組b的索引為0的元素值bOut:array([-1,2,3])In:a#數組a的相應元素發生了改變Out:array([0,-1,2,3,4,5])2.切片盡管數組b是同原數組切片產生的視圖,視圖與原數組共享數據,但它們仍是獨立的對象。各自有自己的維度、形狀、大小等屬性。3.1.3Numpy數組基本操作實例演示數組的運算包括數組與數的運算,以及數組與數組的運算。數組與數進行運算時,數組的每一個元素會與數進行運算,運算結果會保存到一個新數組,原數組保持不變。數組也可以與數進行比較運算,結果是一個布爾數組。數組與數組運算要求兩數組形狀相同,對應位置上的元素之間會執行相應的運算。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.運算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函數實例演示一種是numpy模塊的函數:np.函數名()另一種是numpy數組的成員函數:數組對象.函數名()有一些函數(如reshape())既是numpy模塊的函數,又是數組的成員函數,可以通過兩種方式使用。In:a=np.arange(8)b=np.reshape(a,(2,4))#調用numpy模塊的函數,傳入參數ac=a.reshape(2,4)#調用數組a的成員函數,無須傳參數使用形式3.1.4Numpy函數實例演示用于對數組a進行原地排序,即直接修改數組本身,使其元素按照升序排列。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()函數Numpy數組沒有降序排序的功能。如要實現降序排序,可以按照如下的方法進行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函數實例演示如果要對二維及以上的數組排序,需要用axis參數指定排序的軸。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()函數3.1.4Numpy函數實例演示Numpy用于計算的函數有兩類。逐元素操作的函數,對數組中的每個元素分別計算,返回一個新數組。這類函數不會改變數組的整體結構,而是對其中每個元素單獨進行計算,如sqrt、sin、cos等。In:a=np.array((4,9,16,25)).reshape(2,2)np.sqrt(a)#對數組的每一個元素求平方根Out:array([[2.,3.],[4.,5.]])用于計算的函數3.1.4Numpy函數實例演示Numpy用于計算的函數有兩類。聚合操作,用于將數組中的所有元素進行計算,返回一個標量或指定軸上的累計結果。它可以對整個數組或特定軸進行操作,改變數組的維度,如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()#未指定參數,對所有元素求和,結果為一個數Out:62In:a.sum(axis=0)#指定軸0,按列求和,結果為一個一維數組Out:array([17,16,11,18])In:a.sum(axis=1)#指定軸1,按行求和,結果為一個一維數組Out:array([15,18,29])用于計算的函數3.1.4Numpy函數實例演示dot()函數用于計算兩個數組的點積。對于一維數組,它返回向量的點積;對于二維數組(如矩陣),它返回矩陣乘積。二維數組與一維數組進行點積是二維數組的每一行與一維數組進行點積,其結果是一維數組。In:a=np.array([1,2,3])b=np.array([4,5,6])result=np.dot(a,b)resultOut:32dot()函數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函數實例演示二維數組與二維數組進行點積,要求第一個數組的列數等于第二個數組的行數。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()函數3.1.4Numpy函數實例演示where()函數用于根據條件篩選或生成數組,有兩種用法:條件篩選:numpy.where(condition)參數:條件,常用比較運算表示功能:返回滿足條件的元素的索引,常用于找出數組中符合條件的位置。In:a=np.array([12,21,32,14,36])b=np.where(a>20)Out:(array([1,2,4],dtype=int64),)#返回滿足條件的索引where()函數3.1.4Numpy函數實例演示where()函數用于根據條件篩選或生成數組,有兩種用法:條件賦值:numpy.where(condition,x,y)參數:條件,兩個數組功能:根據給定的條件返回數組。當條件為真時返回x對應的值,否則返回y對應的值,要求x和y與原數組的形狀相同。In:a=np.array([12,21,32,14,36])b=a*2c=a//2d=np.where(a>20,b,c)#第2和第3個參數都是數組Out:array([6,42,64,7,72])
#數組a第一個元素不滿足>20的條件,故d的第一個元素是c的第一個元素,其余的依此類推。where()函數3.2Numpy數據類型3.2.1Numpy數據類型概述3.2.2Numpy數據類型轉換3.2.1Numpy數據類型概述實例演示常用的數據類型有:整數類型(int8,int16,int32,int64)無符號整數類型(uint8,uint16,uint32,uint64)浮點數類型(float16,float32,float64)復數類型(complex64)如果創建數組時不指定數據類型,將由系統自動確定數據類型。也可以通過參數dtype指定數據類型。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數據類型轉換實例演示astype()方法用于將數組的元素類型轉換為指定的類型,并返回一個新的數組,而不改變原數組。astype()方法可以將數組從一種數據類型轉換為另一種。當從高精度類型轉換為低精度類型時(如float64轉int32),可能會丟失數據的精度,需要慎重對待。In:a=np.arange(6)a.dtypeOut:dtype('int32')In:b=a.astype(16)#改變a的數據類型,并創建新數組b.dtypeOut:dtype('int16')In:a=np.random.rand(4)a.dtypeOut:dtype('float64')In:b=a.astype(np.float32)#改變a的數據類型,并創建新數組b.dtypeOut:dtype('float32')3.3Numpy數組廣播機制使兩個數組的維數相同,且各維度的長度相同用于處理不同形狀數組之間運算機理功能3.3Numpy數組廣播機制如果兩個數組的維數不同,在維數較小的數組前面補1,直到兩個數組的維數相同。規則一從左到右逐維檢查兩個數組的長度,如果長度不同且有一個長度為1,則擴充長度為1的維度,直到兩個數組相等;如果長度不同且都不為1,則不能擴充。規則二實例演示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)的數組a與形狀為(2,)的數組b的運算a+b。a的形狀為(3,2),b的形狀為(2,)首先按照規則一,把數組b的形狀擴充為(1,2)。然后按照規則二,將它擴充為3,數組b的形狀變為(3,2)。至此,兩個數組維數相同,形狀相同,可以進行運算。In:a+bOut:array([[1,3],[3,5],[5,7]])實例演示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)的數組a與形狀為(2,1)的數組b的運算a+b。數組a和b都是二維數組,維數相同,無須擴充。兩個數組的第一維長度都是2,無須擴充。數組a的第二維長度為3,數
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025廠里安全培訓考試試題附參考答案(研優卷)
- 2025新員工入職安全培訓考試試題含下載答案可打印
- 加氫設備企業數字化轉型與智慧升級戰略研究報告
- 不銹鋼碗企業數字化轉型與智慧升級戰略研究報告
- 中耕機企業ESG實踐與創新戰略研究報告
- 船式拖拉機(機耕船)企業ESG實踐與創新戰略研究報告
- 2025年醫療行業服務態度改進計劃
- 青年創業者支持與培育計劃
- 在線教育教師職稱評審論文分享
- 信息技術行業動火作業管理措施
- 公司電腦常見問題處理手冊
- 寵物輸液治療技術-靜脈輸液療法(寵物臨床治療課件)
- 豬白條購銷合同范本
- 鍋爐延期檢驗申請書
- 部編版道德與法治三年級下冊第三單元《我們的公共生活》大單元作業設計案例(一)
- 機械設計手冊:單行本 液壓傳動(第六版)
- 紅色故事宣講《小蘿卜頭的故事》
- 活動板房拆裝合同模板范本
- GPS在森林調查中的應用-手持GPS在森林調查中的應用(森林調查技術)
- 直接打印800字作文紙
- 武漢市軌道交通一號線某期工程土建施工投標施工組織設計
評論
0/150
提交評論