加速你的python腳本

因?yàn)榻谝獙?xiě)嵌套for循環(huán),由于運(yùn)算量有點(diǎn)大,耗時(shí)比較久。所以就在谷歌上搜了搜有沒(méi)有辦法可以提升python for loop的速度抹估,然后就發(fā)現(xiàn)了非常好用的模塊:Numba

image

Numba makes Python code fast

官方網(wǎng)址:http://numba.pydata.org/

首先如果你沒(méi)安裝的話,可以通過(guò)pip install numba --user裝一下舆床,或者如果你已經(jīng)安裝了Anaconda3的話棋蚌,那直接用conda安裝的python3就有這個(gè)模塊。

tips:用anaconda管理模塊挨队、軟件,解決環(huán)境沖突問(wèn)題蒿往,省時(shí)省力盛垦,附上linux上的安裝小教程

# download from tsinghua mirror site
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
# check the help message
bash Anaconda3-5.3.1-Linux-x86_64.sh -h
# then install or install into Nonexistent Custom Directory by adding -p
bash Anaconda3-5.3.1-Linux-x86_64.sh
# add to the environment
echo ". /home/saber/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc

Numba的用法很簡(jiǎn)單,一般是加速某個(gè)函數(shù)瓤漏。如果你想加速函數(shù)x腾夯,只需要在定義函數(shù)x的時(shí)候,在def前一行加上一個(gè)裝飾器@jit就行了(就簡(jiǎn)單的一行代碼)蔬充。

下面以筆者寫(xiě)的小例子進(jìn)行介紹蝶俱,這個(gè)例子主要計(jì)算a1到a2所有數(shù)的加和,并用time模塊來(lái)檢測(cè)函數(shù)的運(yùn)行時(shí)間:

from numba import jit
import time

#define function A without numba
def func_A(a1,a2):
 A_result=0
 for i in range(a1,a2):
  A_result+=i
 return A_result

#define func A1 with numba
#just add the @jit
@jit
def func_A1(a1,a2):
 A1_result=0
 for i in range(a1,a2):
  A1_result+=i
 return A1_result

#record the elasped time
def time_func(func_A_i,*args):
 start = time.time()
 func_A_i(*args)
 end = time.time()
 print("Elasped time of func %s is %.4e"%(func_A_i.__name__,end-start))


time_func(func_A,1,10000000)
time_func(func_A,1,10000000)
print()
time_func(func_A1,1,10000000)
time_func(func_A1,1,10000000)

其實(shí)能發(fā)現(xiàn)兩個(gè)函數(shù)的主體是完全一樣的饥漫,最主要的不同是在func_A1前面加了一句@jit榨呆。

運(yùn)行結(jié)果如下:


Elasped time of func func_A is 5.4757e-01
Elasped time of func func_A is 5.3267e-01

Elasped time of func func_A1 is 5.3686e-02
Elasped time of func func_A1 is 4.7684e-06

細(xì)心的讀者可能發(fā)現(xiàn)了,我對(duì)每個(gè)函數(shù)都運(yùn)行了2次庸队,func_A的時(shí)間幾乎一致积蜻,func_A1第二次的時(shí)間比第一次少了四個(gè)數(shù)量級(jí)闯割,這是因?yàn)榈诙蔚臅r(shí)間才是numba加速后函數(shù)執(zhí)行的時(shí)間

通俗理解竿拆,numba第一次讀取函數(shù)時(shí)宙拉,會(huì)將函數(shù)轉(zhuǎn)換為計(jì)算更快的語(yǔ)言,這是編譯的過(guò)程丙笋,會(huì)消耗一些時(shí)間谢澈,之后numba將編譯存儲(chǔ)起來(lái),下次遇見(jiàn)同類型的數(shù)據(jù)御板,直接讀取編譯澳化,計(jì)算得到結(jié)果。官方解釋如下:

First, recall that Numba has to compile your function for the argument types given before it executes the machine code version of your function, this takes time. However, once the compilation has taken place Numba caches the machine code version of your function for the particular types of arguments presented. If it is called again the with same types, it can reuse the cached version instead of having to compile again.

所以總的來(lái)說(shuō)numba加速后速度提升還是很大的稳吮,特別是對(duì)有想加速python腳本需求的人來(lái)說(shuō)缎谷。

歡迎關(guān)注公眾號(hào):"生物信息學(xué)"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市灶似,隨后出現(xiàn)的幾起案子列林,更是在濱河造成了極大的恐慌,老刑警劉巖酪惭,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件希痴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡春感,警方通過(guò)查閱死者的電腦和手機(jī)砌创,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鲫懒,“玉大人嫩实,你說(shuō)我怎么就攤上這事】遥” “怎么了甲献?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)颂翼。 經(jīng)常有香客問(wèn)我晃洒,道長(zhǎng),這世上最難降的妖魔是什么朦乏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任球及,我火速辦了婚禮,結(jié)果婚禮上呻疹,老公的妹妹穿的比我還像新娘吃引。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布际歼。 她就那樣靜靜地躺著惶翻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鹅心。 梳的紋絲不亂的頭發(fā)上吕粗,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音旭愧,去河邊找鬼颅筋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛输枯,可吹牛的內(nèi)容都是我干的议泵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼桃熄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼先口!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瞳收,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碉京,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后螟深,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谐宙,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年界弧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凡蜻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垢箕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舰讹,到底是詐尸還是另有隱情茅姜,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布月匣,位于F島的核電站,受9級(jí)特大地震影響奋姿,放射性物質(zhì)發(fā)生泄漏锄开。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一称诗、第九天 我趴在偏房一處隱蔽的房頂上張望萍悴。 院中可真熱鬧,春花似錦、人聲如沸癣诱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撕予。三九已至鲫惶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間实抡,已是汗流浹背欠母。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吆寨,地道東北人赏淌。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像啄清,于是被迫代替她去往敵國(guó)和親六水。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,446評(píng)論 0 13
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,294評(píng)論 0 10
  • 體態(tài)龐大辣卒、身材健碩的駱駝被稻草壓死掷贾,聽(tīng)來(lái)稍顯不可思議,怎奈:“想象很骨感添寺,現(xiàn)實(shí)很打臉胯盯。”且看壓死駱駝的最后...
    最初遇見(jiàn)閱讀 345評(píng)論 0 2
  • 要挨多少刀板子计露, 才能練得一身唱念做打博脑。 要?dú)v經(jīng)多少世態(tài)變幻, 才顯藝術(shù)的魔力票罐。 那些懂戲的人不懂你叉趣, 真是幸運(yùn)。...
    十年007閱讀 177評(píng)論 0 11
  • 文/騎豬的書(shū)生 (一) 昨天傍晚下班该押,剛好出差到深圳的老友約我見(jiàn)了一面疗杉。 說(shuō)實(shí)在,見(jiàn)面的那一刻我差點(diǎn)沒(méi)認(rèn)識(shí)是他蚕礼,那...
    騎豬的書(shū)生閱讀 433評(píng)論 4 9