今天拖延癥犯了. 我的拖延癥表現(xiàn)是狂做另一件以后可能用到, 但現(xiàn)在無(wú)關(guān)緊要的事情. 比如加速python的運(yùn)行速度.
Numba
Numba是個(gè)很神奇的東西, 加上以后可以提高python的運(yùn)行速度.
這里有一篇報(bào)道翻譯, 使用NumPy、Numba和Python異步編程的高性能大數(shù)據(jù)分析與對(duì)比
直接看我在自己電腦上測(cè)試的結(jié)果:
行數(shù) | numpy | numpy+numba |
---|---|---|
10^7 | 9.1 | 1.2秒 |
10^8 | 99.7 | 4.9秒 |
報(bào)道里還有22. 6分鐘對(duì)40.2秒的成績(jī), 我可不會(huì)去測(cè)試的.
Numba在使用時(shí)幾乎不用修改代碼, 最簡(jiǎn)單的用法就是在每個(gè)函數(shù)之前加入@jit的修飾, 這篇報(bào)道里就是這么做的. 感覺(jué)是免費(fèi)升級(jí)了電腦.
自動(dòng)給每個(gè)函數(shù)加@jit
但我連給函數(shù)加@jit都懶得做, 既然是好像加錯(cuò)了也沒(méi)有太多的壞處, 那干脆統(tǒng)一給所有的函數(shù)都加上這個(gè)修飾好了.
所以, 就干脆寫(xiě)了一段代碼, 把py文件/ipynb文件當(dāng)作文本處理, 用正則表達(dá)式搜索出所有的函數(shù)定義, 在前面加一句@jit好了.
復(fù)習(xí)了一下正則表達(dá)式. 之前寫(xiě)<序列一致性檢驗(yàn)工具>的時(shí)候, 主要練習(xí)的是正則表達(dá)式中的查找, 這一次練習(xí)的是替換.
此處請(qǐng)參考Python3 cookbook, 需要小心的一個(gè)問(wèn)題是, 如果用非轉(zhuǎn)譯的"\n"來(lái)替換字符串的時(shí)候, re.sub好像容易把\n給翻譯了, 用\n也沒(méi)有辦法. 但用.replace還是可以的. 在處理ipynb文件的時(shí)候費(fèi)了很大周折.
代碼在這里
使用說(shuō)明
- 對(duì)本路徑下所有的py文件添加@jit修飾, 并存入outputpath中
python3 decorate_with_jit.py --a allpy outputpath
- 對(duì)本路徑下所有的ipynb文件添加@jit修飾, 并存入outputpath中
python3 decorate_with_jit.py --a allipynb outputpath
- 對(duì)本路徑下所有的py文件去除@jit修飾, 并存入outputpath中
python3 decorate_with_jit.py --r allpy outputpath
- 對(duì)本路徑下所有的ipynb文件去除@jit修飾, 并存入outputpath中
python3 decorate_with_jit.py --r allipynb outputpath
python3 decorate_with_jit.py --a A.py B.py
python3 decorate_with_jit.py --r A.py B.py
EOF.