2013年8月22日 星期四

python 分析程式效率

這是意外發現到的python standard module裡面有個較做profile.py,這東西實在是異常好用阿! 由於上次我用python寫粒子碰撞,我發現當我用到150個particle互相碰撞時,fps就開始降了,於是我開始想著要怎麼提升效率,我在論壇上面發問,結果就有人給我這個分析的方法,實在是很感謝那個人:) python又讓我驚豔了一次。  首先就來看看這張結果圖吧


非常詳細的分析,這個模組的使用方法其實很簡單,官方網站 隨便看都懂,在cmd裡面打cProfile.py -o outputfile.txt youfile.py,這麼一來就會將分析結果存在outputfile.txt中,cProfile.py是用C實現的比起profile.py純python實現,來的有效率。
然後呢要查看這個結果時再用 pstats 這模組

p = pstats.Stats('outputfile.txt')
p.sort_stats('time').print_stats(10)

經過這兩行就會,將結果過濾成以total time來排序並取前10名,如這張圖表示,拖累效率的地方在於collision這function,其實前幾名都把矛頭指向一個地方,那就是我之前寫的vector:(
果然用python來直接寫數學運算是比較沒效率的。

本來的想法是想用numpy來試試看,可是看過官方document後,我覺得numpy是對於數組的運算才有比較大的效率差別,也就是array的運算,因此決定乾脆用C++來寫一個python版的vector :) 不過這得稍微花時間來研究一下了 :)

1 則留言: