版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第十三章調(diào)試第1頁,共21頁。案例:尋找連續(xù)為1的游程 findruns1-function(x,k)n-length(x) runs-vector(length=n) count-0 for(i in 1:(n-k+1) if(all(xi:i+k-1=1) count-count+1 runscount0) runs-runs1:count else runs-NULL return(runs) findruns1(c(1,0,0,1,1,0,0,1,1,1),2)1 3 4 7 8 9顯然,出錯了第2頁,共21頁。調(diào)試方法一:手動,在程序中添加多個print(),把程序的內(nèi)部細(xì)節(jié)輸出來查
2、看是哪里出的問題。function(x,k)print(x) #輸出xprint(k) #輸出kn-length(x)print(n) #輸出n runs-vector(length=n) count-0 for(i in 1:(n-k+1) if(all(xi:i+k-1=1) count-count+1 runscount0) runs-runs1:countprint(runs) #輸出結(jié)果 else runs x 1 1 0 0 1 1 0 0 1 1 1Browse2 debug at findruns1.R#2: n debug at findruns1.R#3: runs pri
3、nt(n)1 10Browse2 debug at findruns1.R#4: count debug at findruns1.R#5: for (i in 1:(n - k + 1) if (all(xi:i + k - 1 = 1) count - count + 1 runscount debug at findruns1.R#5: iBrowse2 debug at findruns1.R#6: if (all(xi:i + k - 1 = 1) count - count + 1 runscount xi:i+k-1 #出錯1 0Browse2 i:i+k-11 2Browse2
4、 i1 1Browse2 k1 2Browse2 Q #退出調(diào)試思考后可以發(fā)現(xiàn),少加了括號。第7頁,共21頁。 source(findruns.R) findruns(c(1,0,0,1,1,0,0,1,1,1),2)1 4 8 9正確。下面這個案例是用遞歸算法排序qs-function(x)if(length(x)=1)return(x)pivot-x1therest-x-1sv1-theresttherestpivotsv2=pivotsv1-qs(sv1)sv2-qs(sv2)return(c(sv1,pivot,sv2)a a qs(a)1 2 7 8 9 32 45結(jié)果是正確的,但運(yùn)
5、算過程是比較讓人費(fèi)解的。本人要說明的是,調(diào)試工具不僅可以找錯,也可以幫助理解程序的運(yùn)行過程。debugonce(qs) qs(a)debugging in: qs(a)debug at qs.R#1: if (length(x) = 1) return(x) pivot - x1 therest - x-1 sv1 - theresttherest pivot sv2 = pivot sv1 - qs(sv1) sv2 debug at qs.R#2: if (length(x) debug at qs.R#2: NULLBrowse2 x1 8 7 2 9 45 32Browse2 leng
6、th(x)1 6Browse2 debug at qs.R#3: pivot pivotError: object pivot not foundBrowse2 debug at qs.R#4: therest pivot1 8Browse2 debug at qs.R#5: sv1 - theresttherest therest1 7 2 9 45 32第10頁,共21頁。Browse2 debug at qs.R#6: sv2 = pivotBrowse2 sv11 7 2Browse2 debug at qs.R#7: sv1 sv21 9 45 32Browse2 debug at
7、qs.R#8: sv2 sv11 2 7Browse2 debug at qs.R#9: return(c(sv1, pivot, sv2)Browse2 sv21 9 32 45Browse2 1 2 7 8 9 32 45看到每一步的結(jié)果,對程序的理解必然會更深刻。第11頁,共21頁。第十四章性能提升:速度和內(nèi)存第12頁,共21頁。本章主要介紹通過向量化(相對for()循環(huán),可以理解向量化的意思是處理長向量而不是把向量截成單個分別處理)的方式優(yōu)化自己的R代碼。當(dāng)然,提升速度最好的方法永遠(yuǎn)是直接用C或C+編寫代碼。第13頁,共21頁。 x-runif(10000000) y-runif(10
8、000000) z-vector(length=10000000) system.time(z-x+y) user system elapsed 0.08 0.06 0.14 system.time(for(i in 1:length(x)zi-xi+yi) user system elapsed 36.83 0.06 36.89 三個數(shù)字分別表示“用戶”是消耗在應(yīng)用程序(非操作系統(tǒng)部分)執(zhí)行的時間,“系統(tǒng)”是底層操作系統(tǒng)執(zhí)行(例如磁盤讀寫等)部分的時間,“流逝”是經(jīng)過的總時間(可以認(rèn)為是前兩者的總和)。一般優(yōu)化時主要關(guān)注“用戶”的時間??梢钥闯?,向量化的運(yùn)行速度遠(yuǎn)遠(yuǎn)高于for()循環(huán)第14頁
9、,共21頁。下面是第八章出現(xiàn)的例子sum-0nreps-100000for(i in 1:nreps)xy-rnorm(2)sum-sum+max(xy)print(sum/nreps)emax-function(nreps)x-rnorm(2*nreps)maxxy-pmax(x1:nreps,x(nreps+1):(2*nreps)return(mean(maxxy)emax(100000)第15頁,共21頁。 system.time(source(MaxNorm.R)1 0.5628218 user system elapsed 0.72 0.00 0.74 system.time(so
10、urce(MaxNorm2.R)1 0.5678636 user system elapsed 0.03 0.00 0.03 當(dāng)然,速度的提升是以更多內(nèi)存消耗為代價(jià)的,因?yàn)槲覀儗⑺械臄?shù)據(jù)進(jìn)行存儲在計(jì)算,而不是每次生成一對取較大值后就丟失較小值。所以,時間和空間的權(quán)衡經(jīng)常無法避免。第16頁,共21頁。函數(shù)式拷貝和內(nèi)存問題當(dāng)R中已經(jīng)創(chuàng)建的向量或向量的一個對象發(fā)生變化時,程序會在另一塊內(nèi)存區(qū)域創(chuàng)建一份整個對象拷貝,所以只有第一次改變賦值時會有消耗。但如果是列表或數(shù)據(jù)框就會每次都創(chuàng)建。 z-1:10000000system.time(z3-8) user system elapsed 0.06 0.00 0.06 system.time(z33-88) user system elapsed 0 0 0 第17頁,共21頁。 m-5000n-1000z-list() for(i in 1:m)zi-sample(1:10,n,replace=T)system.time(for(i in 1:m) zi3-8) user s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告代理合同的范文
- 2025年浙科版選擇性必修3物理上冊階段測試試卷含答案
- 2025簡單車輛租賃合同協(xié)議書
- 2025家具購銷合同范本
- 2025年西師新版七年級物理下冊階段測試試卷含答案
- 2025電力電纜買賣合同書
- 2025【合同范本】車位買賣合同范本
- 建筑工程的測量與測繪技術(shù)
- 2025年陶瓷過濾器、過濾管項(xiàng)目提案報(bào)告
- 2025年濕法加工合成云母粉項(xiàng)目立項(xiàng)申請報(bào)告模范
- 約束帶的健康宣教課件
- EAM資產(chǎn)管理的人工智能與大數(shù)據(jù)應(yīng)用
- 小學(xué)人教版五年級上冊數(shù)學(xué)填空達(dá)標(biāo)練習(xí)50題
- 向流程設(shè)計(jì)要效率
- 安全文明施工的管理要點(diǎn)
- 附屬醫(yī)院神經(jīng)內(nèi)科中長期發(fā)展規(guī)劃五年發(fā)展規(guī)劃
- 中醫(yī)中風(fēng)病(腦梗死)診療方案
- GMP-基礎(chǔ)知識培訓(xùn)
- 高二數(shù)學(xué)下學(xué)期教學(xué)計(jì)劃
- 文學(xué)類作品閱讀練習(xí)-2023年中考語文考前專項(xiàng)練習(xí)(浙江紹興)(含解析)
- 第五章硅酸鹽分析
評論
0/150
提交評論