版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十三章調(diào)試第1頁(yè),共21頁(yè)。案例:尋找連續(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顯然,出錯(cuò)了第2頁(yè),共21頁(yè)。調(diào)試方法一:手動(dòng),在程序中添加多個(gè)print(),把程序的內(nèi)部細(xì)節(jié)輸出來(lái)查
2、看是哪里出的問(wèn)題。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 #出錯(cuò)1 0Browse2 i:i+k-11 2Browse2
4、 i1 1Browse2 k1 2Browse2 Q #退出調(diào)試思考后可以發(fā)現(xiàn),少加了括號(hào)。第7頁(yè),共21頁(yè)。 source(findruns.R) findruns(c(1,0,0,1,1,0,0,1,1,1),2)1 4 8 9正確。下面這個(gè)案例是用遞歸算法排序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、算過(guò)程是比較讓人費(fèi)解的。本人要說(shuō)明的是,調(diào)試工具不僅可以找錯(cuò),也可以幫助理解程序的運(yùn)行過(guò)程。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頁(yè),共21頁(yè)。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é)果,對(duì)程序的理解必然會(huì)更深刻。第11頁(yè),共21頁(yè)。第十四章性能提升:速度和內(nèi)存第12頁(yè),共21頁(yè)。本章主要介紹通過(guò)向量化(相對(duì)for()循環(huán),可以理解向量化的意思是處理長(zhǎng)向量而不是把向量截成單個(gè)分別處理)的方式優(yōu)化自己的R代碼。當(dāng)然,提升速度最好的方法永遠(yuǎn)是直接用C或C+編寫(xiě)代碼。第13頁(yè),共21頁(yè)。 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 三個(gè)數(shù)字分別表示“用戶”是消耗在應(yīng)用程序(非操作系統(tǒng)部分)執(zhí)行的時(shí)間,“系統(tǒng)”是底層操作系統(tǒng)執(zhí)行(例如磁盤(pán)讀寫(xiě)等)部分的時(shí)間,“流逝”是經(jīng)過(guò)的總時(shí)間(可以認(rèn)為是前兩者的總和)。一般優(yōu)化時(shí)主要關(guān)注“用戶”的時(shí)間。可以看出,向量化的運(yùn)行速度遠(yuǎn)遠(yuǎn)高于for()循環(huán)第14頁(yè)
9、,共21頁(yè)。下面是第八章出現(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頁(yè),共21頁(yè)。 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)行存儲(chǔ)在計(jì)算,而不是每次生成一對(duì)取較大值后就丟失較小值。所以,時(shí)間和空間的權(quán)衡經(jīng)常無(wú)法避免。第16頁(yè),共21頁(yè)。函數(shù)式拷貝和內(nèi)存問(wèn)題當(dāng)R中已經(jīng)創(chuàng)建的向量或向量的一個(gè)對(duì)象發(fā)生變化時(shí),程序會(huì)在另一塊內(nèi)存區(qū)域創(chuàng)建一份整個(gè)對(duì)象拷貝,所以只有第一次改變賦值時(shí)會(huì)有消耗。但如果是列表或數(shù)據(jù)框就會(huì)每次都創(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頁(yè),共21頁(yè)。 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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年研發(fā)合作合同(共享成果)
- 2025版?zhèn)€人房產(chǎn)買(mǎi)賣(mài)合同示范協(xié)議4篇
- 2025年食品飲料品牌獨(dú)家代理銷(xiāo)售合同范本6篇
- 二零二五版1209兩人合伙成立網(wǎng)絡(luò)直播平臺(tái)合作協(xié)議3篇
- 個(gè)人獨(dú)資企業(yè)股權(quán)變更協(xié)議模板一
- 2025年度物流倉(cāng)儲(chǔ)設(shè)施租賃合同范本12篇
- 個(gè)性化翻譯合作合同(2024年版)一
- 教育信息化背景下的研究探索與挑戰(zhàn)
- 智慧教育背景下的數(shù)學(xué)競(jìng)賽輔導(dǎo)方法探討
- 2025年度個(gè)人貸款合同擔(dān)保期限及續(xù)約規(guī)定3篇
- 餐廚垃圾收運(yùn)安全操作規(guī)范
- 皮膚內(nèi)科過(guò)敏反應(yīng)病例分析
- 電影《獅子王》的視聽(tīng)語(yǔ)言解析
- 妊娠合并低鉀血癥護(hù)理查房
- 煤礦反三違培訓(xùn)課件
- 向流程設(shè)計(jì)要效率
- 2024年中國(guó)航空發(fā)動(dòng)機(jī)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 當(dāng)代中外公司治理典型案例剖析(中科院研究生課件)
- 動(dòng)力管道設(shè)計(jì)手冊(cè)-第2版
- 2022年重慶市中考物理試卷A卷(附答案)
- Python繪圖庫(kù)Turtle詳解(含豐富示例)
評(píng)論
0/150
提交評(píng)論