數(shù)組和矢量化計(jì)算 第二章Arrays and Vectorized Computation_第1頁(yè)
數(shù)組和矢量化計(jì)算 第二章Arrays and Vectorized Computation_第2頁(yè)
數(shù)組和矢量化計(jì)算 第二章Arrays and Vectorized Computation_第3頁(yè)
數(shù)組和矢量化計(jì)算 第二章Arrays and Vectorized Computation_第4頁(yè)
數(shù)組和矢量化計(jì)算 第二章Arrays and Vectorized Computation_第5頁(yè)
已閱讀5頁(yè),還剩19頁(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)介

1、數(shù)組和矢量化計(jì)算創(chuàng)新應(yīng)用技術(shù)類(lèi)課程N(yùn)umpyPython科學(xué)計(jì)算的基礎(chǔ)庫(kù),是科學(xué)計(jì)算包Pandas的基礎(chǔ)第三方庫(kù),需要安裝 pip install numpuAnaconda環(huán)境中已安裝 import numpy as npndarray: Numpy核心N-dimensional array, N維數(shù)組相同數(shù)據(jù)類(lèi)型的元素組成的多維數(shù)組數(shù)組大小需實(shí)現(xiàn)指定ndarray的基本屬性arr1 = np.array(1,3,5,7,9)arr2 = randn(2,3)135791.85381.43710.2740.48452.4375-2.2758arr1.dtype #數(shù)據(jù)類(lèi)型dtype(int3

2、2)arr1.ndim #軸axis1arr1.size #大小,數(shù)據(jù)元素個(gè)數(shù)3arr1.shape #型,每個(gè)軸的元素個(gè)數(shù)(3L,)arr2.dtype #數(shù)據(jù)類(lèi)型dtype(float64)arr1.ndim #軸2arr1.size #大小,數(shù)據(jù)元素個(gè)數(shù)6arr1.shape #型,每個(gè)軸的元素個(gè)數(shù)(2L,3L)Numpy支持的數(shù)據(jù)類(lèi)型見(jiàn)教材P86axis 0axis 101 0 1 2np的基礎(chǔ)函數(shù)np.set_printoptions(precision=4, suppress=True)輸出精度,是否使用科學(xué)計(jì)算np.array(1,2,3,4,0,1,2,3 )將數(shù)據(jù)轉(zhuǎn)化為 nd

3、arraynp.zeros(10)生成大小為10的1np.zeros( (3,6) )生成全為0的 36的數(shù)組np.empty( (2,3,2) )生成新的3維數(shù)組np.arange(15)生成0-14的一維整數(shù)數(shù)組np.eye(5)生成55的單位矩陣標(biāo)量和矢量之間的運(yùn)算數(shù)組可以代替循環(huán)對(duì)數(shù)據(jù)執(zhí)行批量操作,稱為矢量化(Vectorization)arr = np.array( 1.,2.,3.,4.,5.,6. )1/arrarray( 1. , 0.5 , 0.33333333, 0.25 , 0.2 , 0.16666667)arr*0.5array( 1. , 1.41421356, 1

4、.73205081, 2. , 2.23606798, 2.44948974)等價(jià)于: 1/1, 1/2, 1/3, 1/4, 1/5, 1/6 數(shù)組的運(yùn)算大小相同的數(shù)組可以進(jìn)行算法運(yùn)算相同位置的元素進(jìn)行運(yùn)算arr = np.array( 1.,2.,3.,4.,5.,6. )arr*arr array( 1. , 4. , 9., 16. , 25. , 36.)arr - arrarray( 0., 0. , 0., 0. , 0., 0. )另有: np.dot(arr.T, arr)#arr.T 轉(zhuǎn)置矩陣 數(shù)組的索引通過(guò)索引對(duì)數(shù)組進(jìn)行遞歸訪問(wèn)高維數(shù)組是低維數(shù)組元素組成的一維數(shù)組arr3

5、d = np.array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)arr3d0array(1, 2, 3, 4, 5, 6) arr2d = arr3d1 #數(shù)組賦值,得到新的數(shù)據(jù)副本arr2d1array( 10,11,12 )數(shù)組的切片選取數(shù)據(jù)子集或單個(gè)元素通過(guò)標(biāo)量為數(shù)據(jù)子集賦相同的值arr = np.arange(10)arr5:8array(5, 6, 7)arr5:8 = 12arrarray( 0, 1, 2, 3, 4, 12, 12, 12, 8, 9)1357911arr = np.array(1,3,5,7,9,11)arr1 = arr

6、2:4arr1 : = 15arrarray(1,3,15,15,9,11)arr2 = arr2:4.copy()arr2 : = 0arrarray(1,3,15,15,9,11)arrarr1131515911arr2數(shù)組拷貝,得到新的數(shù)據(jù)副本數(shù)組視圖,不復(fù)制數(shù)據(jù)多維切片arr2d = np.array(1, 2, 3, 4, 5, 6, 7, 8, 9)arr2d :2array(1, 2, 3, 4, 5, 6)arr2d2, :1arr2d:2, 1: = 0arr2d一維數(shù)據(jù),切取 01array(1, 0, 0, 4, 0, 0, 7, 8, 9)axis 0: 0-1axis

7、 1: 1-2練習(xí)1利用隨機(jī)生成函數(shù)生成4*6的數(shù)組 arr輸出數(shù)組及其逆矩陣(輸出小數(shù)位限制為2位)將原始數(shù)組arr的數(shù)據(jù)按行保存到文本文件中計(jì)算并輸出 2/arr,arr*8的結(jié)果求數(shù)組中axis0 index2和3 的數(shù)據(jù)之和,存放到 arr2中將arr的axis0 index 36的數(shù)據(jù)全部替換為0將arr的 axis1 index 為 2 的數(shù)據(jù)全部替換為1布爾型索引生成布爾型數(shù)組(條件數(shù)組)names = np.array(Bob, Joe, Will, Bob, Will, Joe, Joe)names = Bobnamesarray( True, False, False, T

8、rue, False, False, False, dtype=bool)利用布爾型數(shù)組進(jìn)行篩選,生成新數(shù)組 data = randn(7, 4) datanames = Bobarray(-1.134 , 0.9503, 0.1324, -1.3896, 0.2716, -1.6605, 0.5938, 0.4903, 0.2871, -0.0783, 0.2875, 0.1215, 0.8425, 0.6174, -0.3871, -0.9052, -0.5516, 0.0467, 0.2841, -0.349 , 0.3584, -1.1396, -0.1088, 1.2183, -1.

9、7838, -2.7454, -0.2898, -0.233 )array(-1.134 , 0.9503, 0.1324, -1.3896, 0.8425, 0.6174, -0.3871, -0.9052 )按照axis0篩選,布爾數(shù)組長(zhǎng)度與數(shù)組索引軸的長(zhǎng)度一致 布爾型索引賦值生成布爾型數(shù)組(條件數(shù)組)names = np.array(Bob, Joe, Will, Bob, Will, Joe, Joe)mask = ((names = Bob) | (names=Will) )maskarray( True, False, True, True, True, False, False,

10、 dtype=bool)datamask, 1:3利用布爾型數(shù)組賦值 datadataseq = 4, 3, 0, 6arr seq負(fù)數(shù)索引將會(huì)從末尾開(kāi)始倒序選取arr -3, -5, -7 #選取index為 5、3、1的行二維list,選取部分元素arr 4, 3, 0,3 arr4, 3 : 0,3 arr =array( 0., 0., 0., 0., 1., 1., 1., 1., 2., 2., 2., 2., 3., 3., 3., 3., 4., 4., 4., 4., 5., 5., 5., 5., 6., 6., 6., 6., 7., 7., 7., 7.)arr =ar

11、ray( 4., 4., 4., 4., 3., 3., 3., 3., 0., 0., 0., 0., 6., 6., 6., 6. )在axis0 按照seq給出的下標(biāo)順序抽取并重新排列arr =array( 4., 3. )抽?。?,0) 和(3,3)的數(shù)據(jù)arr =array( 4., 4., , 3., 3.,)先抽取axis 0 4,0 ,再抽取axis 1 0,3 的數(shù)據(jù)np的通用函數(shù)其他函數(shù)見(jiàn)教材P99。統(tǒng)稱為ufunc,對(duì)ndarray中的數(shù)據(jù)執(zhí)行元素級(jí)運(yùn)算一元np.sqrt(arr) #每個(gè)元素開(kāi)平方np.exp(arr) #指數(shù)運(yùn)算np.modf(arr) #按照小數(shù)和整

12、數(shù)兩部分返回兩個(gè)數(shù)組二元np.maximum( x, y) x,y 按元素比較,較大的值,依次放入一個(gè)數(shù)組中np.divide(x,y) # x/y數(shù)據(jù)矢量化使用數(shù)組表達(dá)式代替循環(huán)的方法數(shù)組運(yùn)算速度快12個(gè)數(shù)量級(jí),甚至更多例:計(jì)算網(wǎng)格上所有點(diǎn)離原點(diǎn)的歐式距離將一維數(shù)據(jù)網(wǎng)格化分別放在二個(gè)矩陣中points = np.arange(-5,5,0.01)xs, ys = np.meshgrid(points, points)使用矩陣的運(yùn)算z= np.sqrt( xs*2 + ys*2 )條件邏輯的數(shù)組運(yùn)算np.where() 三元表達(dá)式的矢量版x if condition else yxarr =

13、np.array(1.1, 1.2, 1.3, 1.4, 1.5)yarr = np.array(2.1, 2.2, 2.3, 2.4, 2.5)cond = np.array(True, False, True, True, False)result = np.where(cond, xarr, yarr)resultarray( 1.1, 2.2, 1.3, 1.4, 2.5)np.where( arr0, 2, -2) #將arr數(shù)組中0的替換為2,其余替換為-2np.where( arr0, 2, arr) #將arr數(shù)組中0的替換為2,其余不變不必是數(shù)組,可以是標(biāo)量練習(xí)2names

14、= np.array( Bob, Joe, Will, Bob, Will, Joe, Joe )利用隨機(jī)生成函數(shù)生成7*5的數(shù)組 arr, 每行數(shù)據(jù)表示names中對(duì)應(yīng)的同學(xué)在5個(gè)科目中的表現(xiàn)。計(jì)算Joe同學(xué)在5個(gè)科目中的平均值。找出Joe同學(xué)0的記錄值,其他記為0,保存在單獨(dú)的數(shù)組中,并存入文件。ndarray的統(tǒng)計(jì)方法基本統(tǒng)計(jì)arr.sum() #全部求和arr.sum(1) #按給定軸求和,產(chǎn)生低一維的數(shù)組布爾型函數(shù)sum() 計(jì)數(shù)、any() 是否存在True、 all()是否都為T(mén)rue排序np.sort( arr, axis=0 ) #按arr的0軸排序,并產(chǎn)生新副本,arr保持

15、不變arr.sort(1) #按arr的1軸排序,arr數(shù)組被修改其他函數(shù)見(jiàn)教材P104ndarray的集合運(yùn)算找出數(shù)組中的唯一值names = np.array(Bob, Joe, Will, Bob, Will, Joe, Joe)np.unique(names)array(Bob, Joe, Will, dtype=|S4) x的元素是否包含于y values = np.array(6, 0, 0, 3, 2, 5, 6) np.in1d(values, 2, 3, 6)array( True, False, False, True, True, False, True, dtype=b

16、ool)其他函數(shù)見(jiàn)教材P107結(jié)果已排序數(shù)組的文件存儲(chǔ)提供二進(jìn)制和文本文件兩種方式二進(jìn)制文件 .npy,存儲(chǔ)單個(gè)數(shù)組,不壓縮 np.save(data.npy, arr).npz, 壓縮存儲(chǔ)多個(gè)數(shù)組 np.savez(data.npz, a=arr1, b=arr2)arch = np.load(data.npz)archa文本文件使用分割符,自動(dòng)存取 np.savetxt()np.loadtxt(datatext.txt, delimiter = , )得到字典對(duì)象隨機(jī)生成numpy.random模塊,提供各種分布的隨機(jī)生成器 隨機(jī)生成指定范圍和個(gè)數(shù)的數(shù)據(jù),數(shù)據(jù)服從某種分布np.random

17、.normal( size=(4,4) ) #生成4*4的矩陣np.randint( 1,9, size=(2,3) ) #隨機(jī)生成指定范圍內(nèi)的整數(shù)均勻分布正態(tài)分布綜合實(shí)例-隨機(jī)漫步從原點(diǎn)0開(kāi)始,每次移動(dòng)1或-1,1或-1出現(xiàn)等概率,移動(dòng)1000步,記錄每步所在的位置,并統(tǒng)計(jì)首次到達(dá)離遠(yuǎn)點(diǎn)距離10的移動(dòng)步數(shù)產(chǎn)生1000個(gè)隨機(jī)數(shù)1,-1生成1000個(gè)0或1的隨機(jī)數(shù)組成的數(shù)組 將數(shù)組中的0替換成-1依次累計(jì)數(shù)組元素的和,記錄為每步所在位置統(tǒng)計(jì)首次絕對(duì)值大于10的數(shù)組下標(biāo)按照=10生成布爾向量找到首個(gè)最大值(True)的下標(biāo)nsteps = 1000draws = np.random.randint

18、(0, 2, size=nsteps)steps = np.where(draws 0, 1, -1)walk = steps.cumsum()barr = (np.abs(walk) = 10)First = barr.argmax()綜合實(shí)例-隨機(jī)漫步(Cont)隨機(jī)漫步過(guò)程重復(fù)若干次(5000次)生成的隨機(jī)數(shù) size =(5000, 1000)放在二維數(shù)組中按照步數(shù)的軸(1)計(jì)算累加和數(shù)組距離原點(diǎn)超過(guò)30的過(guò)程次數(shù)按照=30,生成布爾向量按照軸1方向統(tǒng)計(jì)是否有True,并生成1維布爾向量布爾向量求和計(jì)算5000次過(guò)程中達(dá)到30的平均步數(shù)篩選有=30的二維數(shù)組行得到每行首個(gè)=30元素的下標(biāo)(步數(shù)),形成1維數(shù)組1維數(shù)組求均值nwalks = 5000nsteps = 1000draws = np.random.randint(0, 2, size=(nwalks, nsteps) # 0 or 1steps = np.where(draws 0, 1, -1)walks = steps.cumsum(1)hits30 = (np.abs(walks) = 30).any(1)hits30.sum()crossing_times = (np.abs(walkshits30) = 30).argmax(1)crossing_times.mean()作業(yè)文件中存放某餐廳4、5、6

溫馨提示

  • 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)論