這篇文章主要講解了“Python與C++的速度有哪些區(qū)別”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Python與C++的速度有哪些區(qū)別”吧!
10年積累的做網(wǎng)站、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有崆峒免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
DNA K-mers簡(jiǎn)介
DNA是一種稱(chēng)為核苷酸的長(zhǎng)鏈單位。在DNA中,共有4種核苷酸類(lèi)型,分別用字母A、C、G和T表示。人類(lèi)(更準(zhǔn)確地說(shuō)是智人)擁有核苷酸對(duì)30億個(gè)。例如,人類(lèi)DNA的一小部分可能類(lèi)似于:
ACTAGGGATCATGAAGATAATGTTGGTGTTTGTATGGTTTTCAGACAATT
在此示例中,如果從該字符串中選擇任意4個(gè)連續(xù)的核苷酸(即字母),它將是一個(gè)長(zhǎng)度為4的k-mer(可稱(chēng)之為4-mer)。以下便是從此示例中衍生出來(lái)的一些4-mers例子:ACTA,CTAG,TAGG,AGGG,GGGA等。
難點(diǎn)挑戰(zhàn)
本文以生成所有可能的13-mers為例,從數(shù)學(xué)上講,這是一個(gè)帶有替換的排列問(wèn)題。因此,共有4¹³個(gè)(67108864)可能的13-mers。下面將使用一個(gè)簡(jiǎn)單的算法在C++和Python中生成結(jié)果。
方案比較
為了方便比較C++和Python在此特定挑戰(zhàn)中的優(yōu)劣,我在兩種語(yǔ)言中使用了完全相同的算法。這兩種代碼均有意設(shè)計(jì)地簡(jiǎn)單而相似。同時(shí),避免使用復(fù)雜的數(shù)據(jù)結(jié)構(gòu)或第三方包或庫(kù)。第一段代碼采用Python編寫(xiě)。
defconvert(c): if (c =='A'): return'C' if (c =='C'): return'G' if (c =='G'): return'T' if (c =='T'): return'A' print("Start") opt ="ACGT" s ="" s_last ="" len_str =13 for i inrange(len_str): s += opt[0] for i inrange(len_str): s_last += opt[-1] pos =0 counter =1 while (s != s_last): counter +=1 # You can uncomment the next line to see all k-mers. # print(s) change_next =True for i inrange(len_str): if (change_next): if (s[i] == opt[-1]): ss = s[:i] +convert(s[i]) + s[i+1:] change_next =True else: ss = s[:i] +convert(s[i]) + s[i+1:] break # You canuncomment the next line to see all k-mers. # print(s) print("Number ofgenerated k-mers: {}".format(counter)) print("Finish!")
運(yùn)行Python代碼,生成全部13-mers共6700萬(wàn)個(gè)大約需要61.23秒。為了公平比較,我注釋掉了顯示k-mers的行。如果想在生成k-mers時(shí)顯示它們,也可以取消對(duì)這兩行的注釋。注意,顯示全部k-mers耗時(shí)很長(zhǎng)。如有需要,請(qǐng)操作CTRL+C中止代碼。
現(xiàn)在,來(lái)看看C++中同樣的算法:
#include#include usingnamespacestd; charconvert(char c) { if (c == 'A') return'C'; if (c == 'C') return'G'; if (c == 'G') return'T'; if (c == 'T') return'A'; return' '; } intmain() { cout << "Start" << endl; string opt = "ACGT"; string s = ""; string s_last = ""; int len_str = 13; bool change_next; for (int i=0; i 編譯后,運(yùn)行C++代碼,生成全部13-mers共6700萬(wàn)個(gè)大約需要2.42秒。這意味著運(yùn)行相同算法,Python用時(shí)是C++的25倍多。然后,對(duì)14-mers和15-mers重復(fù)進(jìn)行此實(shí)驗(yàn)。匯總結(jié)果如下表所示:
比較生成13-、14-和15-mers的Python和C++運(yùn)行結(jié)果。
顯然,C++比Python快得多。對(duì)于大多數(shù)程序員和數(shù)據(jù)科學(xué)家而言,這是共識(shí)。但該示例表明,這種差異十分顯著。
本示例并沒(méi)有使用CPU或GPU并行化,因其必須針對(duì)相應(yīng)類(lèi)型的問(wèn)題(密集并行難題)進(jìn)行。此外,示例也沒(méi)有大量涉及內(nèi)存。如果將運(yùn)行結(jié)果進(jìn)行存儲(chǔ)(出于某些特定原因),那么使用內(nèi)存管理在運(yùn)行C++和Python時(shí),將產(chǎn)生更顯著的差異。
此示例和數(shù)以千計(jì)的其他事實(shí)表明,在處理大量數(shù)據(jù)或指數(shù)增長(zhǎng)的過(guò)程中,身為數(shù)據(jù)科學(xué)家,你應(yīng)該了解C++類(lèi)語(yǔ)言。
感謝各位的閱讀,以上就是“Python與C++的速度有哪些區(qū)別”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Python與C++的速度有哪些區(qū)別這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
新聞標(biāo)題:Python與C++的速度有哪些區(qū)別
鏈接URL:http://weahome.cn/article/gdjcdh.html