




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
NumPy數值計算基礎1NumPy矩陣與通用函數目錄NumPy數組對象ndarray2利用NumPy進行統計分析3NumPy提供了兩種基本的對象。ndarray(N-dimensionalArrayObject):存儲單一數據類型的多維數組。ufunc(UniversalFunctionObject):能夠對數組進行處理的函數。創建數組對象在創建數組之前,需要先了解數組的基本屬性,數組的屬性及其說明如下表。創建數組對象1.數組屬性屬性名稱屬性說明ndim返回int,表示數組的維數shape返回tuple,表示數組形狀的陣列,對于n行m列的矩陣,形狀為(n,m)size返回int,表示數組的元素總數,等于數組形狀中各元素的乘積dtype返回data-type,表示數組中元素的數據類型itemsize返回int,表示數組的每個元素的存儲空間(以字節為單位),例如,一個元素類型為float64的數組的itemsiz屬性值為8(float64占用64個bits,每個字節長度為8,所以64/8,占用8個字節),一個元素類型為complex32的數組的itemsiz屬性值為4,即32/8NumPy提供的array函數可以創建一維或多維數組,其基本使用格式如下。array函數主要參數及其說明如下表。創建數組對象2.數組創建參數名稱參數說明object接收array_like,表示所需創建的數組對象,無默認值dtype接收data-type,表示數組所需的數據類型,如果未給定,那么選擇保存對象所需的最小的數據類型,默認為Nonendmin接收int,表示指定生成數組應該具有的最小維數,默認為0numpy.array(object,dtype=None,*,copy=True,order='K',subok=False,ndmin=0,like=None)除了使用array函數創建數組之外,還可以使用arange函數創建數組。arange函數類似于Python自帶的函數range,通過指定開始值、終值和步長來創建一維數組,創建的數組不含終值。arange函數的基本使用格式如下。arange函數常用參數及其說明如下表。創建數組對象參數名稱參數說明start接收int或實數,表示數組的開始值,生成的區間包括該值,默認為0stop接收int或實數,表示數組的終值,生成的區間不包括該值,無默認值step接收int或實數,表示在數組中,值之間的間距,默認為1dtype接收數據類型,表示輸出數組的類型,默認為Nonenumpy.arange([start,]stop,[step,]dtype=None,*,like=None)linspace函數通過指定開始值、終值和元素個數來創建一維數組,默認設置包括終值,這一點需要和arange函數區分。linspace函數的基本使用格式如下。linspace函數的常用參數及其說明如下表。創建數組對象參數名稱參數說明start接收array_like,表示起始值,無默認值stop接收array_like,表示結束值,無默認值num接收int,表示生成的樣本數,默認為50dtype接收數據類型,表示輸出數組的類型,默認為Nonenumpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None,axis=0)logspace函數和linspace函數類似,它創建的是等比數列。logspace函數的基本使用格式如下。在logspace函數的參數中,除了base參數和linspace函數的retstep參數不同之外,其余均相同。創建數組對象numpy.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None,axis=0)NumPy還提供了其他函數用于創建特殊數組,如zeros、eye、diag和ones函數等。zeros函數:用于創建值全部為0的數組,即創建的數組值全部填充為0。eye函數:用于生成主對角線上的元素為1,其他的元素為0的二維數組,類似單位矩陣。diag函數:創建類似對角矩陣的數組,即除對角線上的元素以外的其他元素都為0,對角線上的元素可以是0或其他值。ones函數:用于創建元素全部為1的數組,即創建的數組元素全部填充為1。創建數組對象在實際的業務數據處理中,為了更準確地計算結果,提高分析質量,推動高質量發展,需要使用不同精度的數據類型。NumPy極大程度地擴充了原生Python的數據類型。在NumPy中,所有數組的數據類型是同質的,即數組中的所有元素的數據類型必須是一致的。將元素數據類型保持一致可以更容易確定該數組所需要的存儲空間。創建數組對象3.數組數據類型NumPy的基本數據類型及其取值范圍如下表。創建數組對象類型描述bool用一位存儲的布爾類型(值為True或False)int_由所在平臺決定其精度的整數(一般為int32或int64)int8整數,范圍為
128~127int16整數,范圍為
32768~32767int32整數,范圍為
231~231
1int64整數,范圍為
263~263
1uint8無符號整數,范圍為0~255uint16無符號整數,范圍為0~65535uint32無符號整數,范圍為0~232
1NumPy的基本數據類型及其取值范圍(續表)。創建數組對象類型描述uint64無符號整數,范圍為0~264
1float16半精度浮點數(16位),其中用1位表示正負號,用5位表示整數,用10位表示尾數float32單精度浮點數(32位),其中用1位表示正負號,用8位表示整數,用23位表示尾數float64或float_雙精度浮點數(64位),其中用1位表示正負號,用11位表示整數,用52位表示尾數complex64復數,分別用兩個32位浮點數表示實部和虛部complex128或complex_復數,分別用兩個64位浮點數表示實部和虛部手動創建數組往往很難達到數量要求,NumPy提供了強大的生成隨機數的功能。然而,真正的隨機數很難獲得,在實際中使用的都是偽隨機數。在大部分情況下,偽隨機數就能滿足獲取的需求。當然,某些特殊情況除外,如進行高精度的模擬實驗。對于NumPy,與隨機數相關的函數都在random模塊中,其中包括了可以生成服從多種概率分布隨機數的函數。生成隨機數random函數是非常常見的生成隨機數的方法,random函數的基本使用格式如下。參數size接收int,表示返回的隨機浮點數大小,默認為None。生成隨機數numpy.random.random(size=None)rand函數可以生成服從均勻分布的隨機數,其使用格式如下。參數d0,d1,...,dn接收int,表示返回數組的維度必須是非負數。如果沒有給出參數,那么返回單個Python浮點數,無默認值。randn函數可以生成服從正態分布的隨機數,randn函數的使用格式和參數說明與rand函數類似。生成隨機數numpy.random.rand(d0,d1,...,dn)randint函數可以生成給定上下限范圍的隨機數,其基本使用格式如下。randint函數的常用參數及其說明如下表。生成隨機數numpy.random.randint(low,high=None,size=None,dtype=int)參數名稱參數說明low接收int或類似數組的整數。表示數組最小值。無默認值high接收int或類似數組的整數。表示數組最大值。默認Nonesize接收int或整數元組。表示輸出數組的形狀。默認為Nonedtype接收數據類型。表示輸出數組的類型。默認為int在random模塊中,其他常用于生成隨機數的函數如下表。生成隨機數函數說明seed確定隨機數生成器的種子permutation返回一個序列的隨機排列或返回一個隨機排列的范圍shuffle對一個序列進行隨機排序binomial產生服從二項分布的隨機數normal產生服從正態(高斯)分布的隨機數beta產生服從beta分布的隨機數chisquare產生服從卡方分布的隨機數gamma產生服從gamma分布的隨機數uniform產生均勻分布的隨機數NumPy通常以提供高效率的數組著稱,這主要歸功于索引的易用性。1.一維數組的索引一維數組的索引方法很簡單,與Python中的list的索引方法一致。2.多維數組的索引多維數組的每一個維度都有一個索引,各個維度的索引之間用逗號隔開。多維數組同樣也可以使用整數序列和布爾值索引進行訪問。通過索引訪問數組在NumPy中,常用reshape函數改變數組的“形狀”,即改變數組的維度。reshape函數的基本使用格式如下。reshape函數在改變原始數據的形狀的同時不改變原始數據的值。如果指定的形狀和數組的元素數目不吻合,那么函數將拋出異常。變換數組的形態numpy.reshape(a,newshape,order='C')reshape函數的常用參數及其說明如下表。在NumPy中,可以使用ravel函數完成數組展平工作。flatten函數也可以完成數組展平工作。與ravel函數的區別在于,flatten函數可以選擇橫向或縱向展平。變換數組的形態參數名稱參數說明a接收array_like。表示需要變換形狀的數組。無默認值newshape接收int或int型元組。表示變化后的形狀的維度。無默認值除了可以改變數組“形狀”外,NumPy也可以對數組進行組合。組合主要有橫向組合與縱向組合。使用hstack函數、vstack函數和concatenate函數可完成數組的組合。橫向組合是將由ndarray對象構成的元組作為參數,傳給hstack函數。縱向組合同樣是將由ndarray對象構成的元組作為參數,傳給vstack函數。concatenate函數也可以實現數組的橫向組合和縱向組合,其中當參數axis=1時,數組按照橫向組合,當參數axis=0時,數組按照縱向組合。變換數組的形態除了對數組進行橫向和縱向的組合之外,還可以對數組進行分割。NumPy提供了hsplit、vsplit、split函數,可以將數組分割成相同大小的子數組,也可以指定原數組中需要分割的位置。hsplit函數:可以對數組進行橫向分割,以由ndarray對象構成的元組作為參數。vsplit函數:可以對數組進行縱向分割,以由ndarray對象構成的元組作為參數。split函數:同樣可以實現數組分割。當參數axis=1時,可以對數組進行橫向分割;當參數axis=0時,可以對數組進行縱向分割。變換數組形態1NumPy矩陣與通用函數目錄NumPy數組對象ndarray2利用NumPy進行統計分析3在NumPy中,矩陣是ndarray的子類,且數組和矩陣有著重要的區別。NumPy提供了兩個基本的對象,分別是N維數組對象和通用函數對象,其他對象都是在它們之上構建的。矩陣是繼承自NumPy數組對象的二維數組對象。與數學概念中的矩陣一樣,NumPy中的矩陣也是二維的。使用mat、matrix和bmat函數可創建矩陣。創建NumPy矩陣當使用mat函數創建矩陣時,如果輸入matrix或ndarray對象,那么不會創建相應副本。因此,調用mat函數和調用matrix函數等價。在大多數情況下,用戶會根據小的矩陣來創建大的矩陣,即將小矩陣組合成大矩陣。在NumPy中,可以使用bmat分塊矩陣(blockmatrix)函數實現。在NumPy中,矩陣運算是針對整個矩陣中的每個元素進行的。與使用for循環相比,其在運算速度上更快。創建NumPy矩陣除了能夠實現各類運算外,矩陣還有其特有的屬性,如下表。創建NumPy矩陣屬性名稱屬性說明T返回自身的轉置矩陣H返回自身的共軛轉置矩陣I返回自身的逆矩陣A返回自身數據的二維數組常用的ufunc函數運算有四則運算、比較運算和邏輯運算等。四則運算:ufunc函數支持全部的四則運算,并且保留習慣的運算符,和數值運算的使用方式一樣,但是需要注意的是,ufunc函數操作的對象是數組。數組間的四則運算表示對每個數組中的元素分別進行四則運算,因此進行四則運算的兩個數組的形狀必須相同。比較運算:在ufunc函數中也支持完整的比較運算:>、<、==、>=、<=、!=。比較運算返回的結果是一個布爾型數組,其每個元素為數組對應元素的比較結果。邏輯運算:numpy.all函數用于測試所有數組元素的計算結果是否為True,numpy.any函數用于測試任何數組元素的計算結果是否為True。ufunc函數1.常用的ufunc函數運算廣播(Broadcasting)機制是指不同形狀的數組之間執行算術運算的方式。當使用ufunc函數進行數組計算時,ufunc函數會對兩個數組的對應元素進行計算。進行這種計算的前提是兩個數組的shape一致。如果兩個數組的shape不一致,那么NumPy會實行廣播機制。NumPy中的廣播機制并不容易理解,特別是在進行高維數組計算的時候。ufunc函數2.ufunc函數的廣播機制為了更好地使用廣播機制,需要遵循以下4個原則。讓所有的輸入數組向其中shape最長的數組看齊,shape中不足的部分通過在前面加1補齊。輸出數組的shape是輸入數組shape在各個軸上的最大值的組合。如果輸入數組的某個軸和輸出數組的對應軸的長度相同或其長度為1,那么這個數組能夠用于計算,否則系統將會出錯。當輸入數組的某個軸的長度為1時,沿著此軸運算時使用此軸上的第一組值。ufunc函數1NumPy矩陣與通用函數目錄NumPy數組對象ndarray2利用NumPy進行統計分析3NumPy的文件讀/寫主要有二進制的文件讀/寫和文本文件讀/寫兩種形式。NumPy提供了若干函數,可以將結果保存到二進制或文本文件中。除此之外,NumPy還提供了許多從文件讀取數據并將其轉換為數組的方法。讀/寫文件save函數以二進制的格式保存數據,load函數從二進制的文件中讀取數據,save函數的語法格式如下。參數file接收str,表示要保存的文件的名稱,需要指定文件保存的路徑,如果未設置,那么將會保存到默認路徑下面。參數arr接收array_like,表示需要保存的數組。save函數就是將數組arr保存至名稱為“file”的文件中,其文件的擴展名.npy是系統自動添加的。如果將多個數組保存到一個文件中,那么可以使用savez函數,其文件的擴展名為.npz。當需要讀取二進制文件時,可以使用load函數,用文件名作為參數,存儲時可以省略擴展名,但讀取時不能省略擴展名。讀/寫文件numpy.save(file,arr,allow_pickle=True,fix_imports=True)在實際的數據分析任務中,更多地是使用文本格式的數據,如TXT或CSV格式,因此通常會使用savetxt函數、loadtxt函數和genfromtxt函數執行對文本格式數據的讀取任務。savetxt函數可將數組寫到以某種分隔符隔開的文本文件中,其基本使用格式如下。參數fname接收str,表示文件名。參數X接收array_like,表示數組數據。參數delimiter接收str,表示數據分隔符。讀/寫文件numpy.savetxt(fname,X,fmt='%.18e',delimiter='',newline='\n',header='',footer='',comments='#',encoding=None)loadtxt函數執行的是相反的操作,即將文件加載到一個二維數組中,其基本使用格式如下。loadtxt函數的常用參數主要有兩個,分別是fname和delimiter。參數fname接收str,表示需要讀取的文件或生成器。參數delimiter接收str,表示用于分隔數值的分隔符。讀/寫文件numpy.loadtxt(fname,dtype=<class'float'>,comments='#',delimiter=None,converters=None,skiprows=0,usecols=None,unpack=False,ndmin=0,encoding='bytes',max_rows=None,*,quotechar=None,like=None)genfromtxt函數和loadtxt函數相似,只不過genfromtxt函數面向的是結構化數組和缺失數據。genfromtxt函數通常使用的參數有3個。即用于存放數據的文件參數“fname”。用于分隔數據的字符參數“delimiter”。是否含有列標題參數“names”。讀/寫文件在NumPy中,除了可以使用通用函數對數組進行比較、邏輯等運算之外,還可以使用統計函數對數組進行排序、去重與重復、求最大和最小值以及求均值等統計分析。1.排序NumPy的排序方式主要可以概括為直接排序和間接排序兩種。直接排序指對數值直接進行排序;間接排序是指根據一個或多個鍵對數據集進行排序。在NumPy中,直接排序通常是使用sort函數,間接排序通常是使用argsort函數和lexsort函數。使用函數進行簡單的統計分析sort函數是較為常用的排序方法,無返回值。如果目標數據是一個視圖,那么原始數據將會被修改。當使用sort函數排序時,用戶可以指定一個axis參數,使得sort函數可以沿著指定軸對數據集進行排序。使用argsort函數和lexsort函數,可以在給定一個或多個鍵時,得到一個由整數構成的索引數組,索引表示數據在新的序列中的位置。lexsort函數可以一次性對滿足多個鍵的數組執行間接排序。使用函數進行簡單的統計分析在統計分析的工作中,難免會出現“臟”數據的情況。重復數據就是“臟”數據的情況之一。如果一個一個地手動刪除,那么將會耗時費力且效率低。在NumPy中,可以通過unique函數查找出數組中的唯一值并返回已排序的結果。另一種情況,在統計分析中也經常遇到,即需要將一個數據重復若干次。在NumPy
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 運河工程項目可行性研究報告(模板范文)
- 社區養老服務中心建設可行性研究報告(范文參考)
- 建筑廢料處理與環保消納項目可行性研究報告(范文)
- 農作物種子繁育員常見誤區分析試題及答案
- 2024年足球裁判員考試熱點問題試題及答案
- 2024年體育經紀人考試的實際操作試題及答案
- 辦公樓空間設計裝修工程可行性研究報告(范文)
- 2024年籃球裁判員行為規范試題及答案
- 農作物種子繁育員考試期間的心態調整試題及答案
- 農業植保員2024年集中復習的試題與答案策略
- ISO9001-2015版質量管理體系標準培訓教程
- 人教部編版初中語文七年級下冊 《15.青春之光》課件
- 2025中國海洋石油集團有限公司校園招聘筆試參考題庫附帶答案詳解
- 統信服務器UOS操作系統-產品白皮書
- 糧庫火災的防控措施與技術
- 5G-Advanced通感融合仿真評估方法研究報告
- 魚類營養需求研究與應用-洞察分析
- DB33 860-2012 危險化學品重大危險源安全監控管理規范
- 隱蔽工程影像資料采集要求和拍攝方法(網絡版)
- 《水處理技術(雙語)》課件-實操:EduKit PA提高版
- DB37T 1913-2011 金屬非金屬地下礦山特種作業人員配置
評論
0/150
提交評論