第三次作業——效能分析
阿新 • • 發佈:2018-10-07
分享圖片 urn ali spl cnblogs ctu 轉換 top 代碼
此作業的要求參見:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2145]
該作業git地址為:https://git.coding.net/qiaojingyu/wf_proFile.git
要求0:以 戰爭與和平 作為輸入文件,重讀向由文件系統讀入。連續三次運行,給出每次消耗時間、CPU參數。
因為本次作業使用的是python語言,所以使用命令行輸入以下代碼:
python -m cProfile wf.py -s < war_and_peace.txt
得到的運行時間分別如下:
1.第一次運行:
2.第二次運行:
3.第三次運行:
次數 |
時間(s) |
1 |
0.614 |
2 |
0.636 |
3 |
0.622 |
平均 |
0.624 |
CPU參數: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz 2.40GHz
要求1:要求1 給出你猜測程序的瓶頸。你認為優化會有最佳效果,或者在上周在此處做過優化。
(1)sorted()函數對詞頻進行排序時會比較耗時,所以上周已經進行優化。將讀入的數據存入兩個字典,分兩部分排序,最後合並排序。
(2)猜測將讀取的文件進行小寫轉換、字符轉換後存入字典這一操作會耗時較長。但是上述操作在詞頻統計中是必須操作,猜想可以優化標點符號替換操作(將標點符號封裝起來)。
# 單詞格式化:去掉分詞之後部分英文前後附帶的標點符號 for word in y: # last character of each word word1 = word # use a list of punctuation marks while True: lastchar = word1[-1:] if lastchar in [",", ".", "!", "?", ";", ‘"‘,"-","*","%"]: word2 = word1.rstrip(lastchar) word1 = word2 else: word2 = word1 break while True: firstchar = word2[0:] if firstchar in [",", ".", "!", "?", ";", ‘"‘,"-","*","%"]: word3 = word2.lstrip(firstchar) word2 = word3 else: word3 = word2 break # build a wordList of lower case modified words word_list2.append(word3) #統計詞頻 tf = {} for word in word_list2: word = word.lower() # print(word) word = ‘‘.join(word.split()) if word in tf: tf[word] += 1 else: tf[word] = 1 return tf
要求2:通過profile 找出程序的瓶頸。給出程序運行中最花費時間的3個函數或代碼片段。
在命令行輸入以下代碼:
python -m cProfile -s time wf.py -s < war_and_peace.txt
該命令可以顯示出程序中每個函數調用的次數以及運行時間,並對其按時間長短進行排序,看起來比較直觀。
得到耗時前三名結果如下圖紅框內所示:
要求3:根據瓶頸,“盡力而為”地優化程序性能。
根據要求1中對程序瓶頸的猜想,優化後的代碼如下所示:
while True: lastchar = word1[-1:] for lastchar in ‘\r .,"‘: word2 = word1.rstrip(lastchar) word1 = word2 else: word2 = word1 break while True: firstchar = word2[0:] for lastchar in ‘\r .,"‘: word3 = word2.lstrip(firstchar) word2 = word3 else: word3 = word2 break # build a wordList of lower case modified words word_list2.append(word3)
要求4:再次profile,給出在要求1 中的最花費時間的3個函數此時的花費。
再次輸入代碼:
python -m cProfile -s time wf.py -s < war_and_peace.txt
得到結果如下圖所示:
1.第一次運行:
2.第二次運行:
3.第三次運行:
次數 |
時間(s) |
1 |
0.587 |
2 |
0.589 |
3 |
0.582 |
平均 |
0.586 |
CPU參數: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz 2.40GHz
對比可看出平均運行時間減少了0.038s。
要求5:程序運行時間。
等待教師測評。
第三次作業——效能分析