焦点消息!与Python的速度较量:C++究竟有多快?
 【资料图】
【资料图】
图源:unsplash
对于数据科学家而言,热爱Python的理由数不胜数。但你是否也曾问过这样的问题:Python和C或C++等更专业的低级编程语言究竟有何不同呢?我想这是很多数据科学家或者Python用户曾经问过或者将来会问自己的问题。
Python和C++类语言之间存在许多区别,本文将通过一个十分简单的例子向你展示,与Python相比,C++究竟有多快。
为了说明这种区别,本文选择一个简单实用而非想象虚构的任务:生成固定值为“k”的所有可能DNA k-mers。选择该示例,是因为与基因组相关的许多数据处理和任务分析(例如k-mers生成)都是计算密集型的,而这同样也是很多生物信息学领域的数据科学家对C++感兴趣的原因。
请注意,本文目标并不是以最有效的方式比较C++和Python。这两种代码均可采用更高效的方式和更优化的方法编写。本文的唯一目标,就是比较这两种语言在使用完全相同的算法和指令时的速度。
DNA K-mers简介
DNA是一种称为核苷酸的长链单位。在DNA中,共有4种核苷酸类型,分别用字母A、C、G和T表示。人类(更准确地说是智人)拥有核苷酸对30亿个。例如,人类DNA的一小部分可能类似于:
ACTAGGGATCATGAAGATAATGTTGGTGTTTGTATGGTTTTCAGACAATT
在此示例中,如果从该字符串中选择任意4个连续的核苷酸(即字母),它将是一个长度为4的k-mer(可称之为4-mer)。以下便是从此示例中衍生出来的一些4-mers例子:ACTA,CTAG,TAGG,AGGG,GGGA等。
难点挑战
本文以生成所有可能的13-mers为例,从数学上讲,这是一个带有替换的排列问题。因此,共有4¹³个(67108864)可能的13-mers。下面将使用一个简单的算法在C++和Python中生成结果。
方案比较
为了方便比较C++和Python在此特定挑战中的优劣,我在两种语言中使用了完全相同的算法。这两种代码均有意设计地简单而相似。同时,避免使用复杂的数据结构或第三方包或库。第一段代码采用Python编写。
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]):                            s = s[:i] +convert(s[i]) + s[i+1:]                            change_next =True                        else:                            s = 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!")运行Python代码,生成全部13-mers共6700万个大约需要61.23秒。为了公平比较,我注释掉了显示k-mers的行。如果想在生成k-mers时显示它们,也可以取消对这两行的注释。注意,显示全部k-mers耗时很长。如有需要,请操作CTRL+C中止代码。
现在,来看看C++中同样的算法:
#include<iostream>           #include<string>             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<len_str;i++)              {                   s += opt[0];              }                 for (int i=0; i<len_str;i++)              {                   s_last += opt.back();              }                 int pos = 0;              int counter = 1;              while (s != s_last)              {                     counter ++;                   // You canuncomment the next line to see all k-mers.                   // cout << s<< endl;                    change_next = true;                   for (int i=0; i<len_str;i++)                   {                       if (change_next)                       {                           if (s[i] == opt.back())                           {                               s[i] = convert(s[i]);                               change_next = true;                           } else {                               s[i] = convert(s[i]);                               break;                           }                       }                   }              }                 // You can uncomment the next line tosee all k-mers.              // cout << s << endl;              cout << "Number of generated k-mers: " <<counter << endl;              cout << "Finish!" << endl;              return0;           }编译后,运行C++代码,生成全部13-mers共6700万个大约需要2.42秒。这意味着运行相同算法,Python用时是C++的25倍多。然后,对14-mers和15-mers重复进行此实验。汇总结果如下表所示:
比较生成13-、14-和15-mers的Python和C++运行结果。
显然,C++比Python快得多。对于大多数程序员和数据科学家而言,这是共识。但该示例表明,这种差异十分显著。
本示例并没有使用CPU或GPU并行化,因其必须针对相应类型的问题(密集并行难题)进行。此外,示例也没有大量涉及内存。如果将运行结果进行存储(出于某些特定原因),那么使用内存管理在运行C++和Python时,将产生更显著的差异。
此示例和数以千计的其他事实表明,在处理大量数据或指数增长的过程中,身为数据科学家,你应该了解C++类语言。
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范
- 
                                  焦点消息!与Python的速度较量:C++究竟有多快?读芯术 2023-06-09 
- 
                                  高考完最想做什么?来听听海南考生怎么说南海网 2023-06-09 
- 
                                  当前热门:生物农药使用指南_关于生物农药使用指南介绍 即时看十分生活网 2023-06-09 
- 
                                  当前简讯:阿玛尼405是什么颜色(阿玛尼405)车百科 2023-06-09 
- 
                                  为期一个月份 云南省2023年“彩云购物节”18日启幕-每日速讯环球网 2023-06-09 
- 
                                  i黄金100g价格今天多少一克(2023年6月9日)金投网 2023-06-09 
- 
                                  每日关注!杰创智能(301248)6月8日主力资金净卖出860.41万元证券之星 2023-06-09 
- 
                                  全球热门:昔日日化巨头最新发布!重大资产置换方案来了,将告别日化业务!e公司微信号 2023-06-09 
- 
                                  环球热讯:杨宗纬最好听的10首歌_李宗盛给杨宗纬写的歌互联网 2023-06-09 
- 
                                  深圳姑娘王欣瑜晋级法网女双半决赛,实现个人大满贯新突破_世界热讯南方都市报 2023-06-09 
- 
                                  焦点消息!与Python的速度较量:C++究竟有多快?读芯术 2023-06-09 
- 
                                  高考完最想做什么?来听听海南考生怎么说南海网 2023-06-09 
- 
                                  当前热门:生物农药使用指南_关于生物农药使用指南介绍 即时看十分生活网 2023-06-09 
- 
                                  当前简讯:阿玛尼405是什么颜色(阿玛尼405)车百科 2023-06-09 
- 
                                  为期一个月份 云南省2023年“彩云购物节”18日启幕-每日速讯环球网 2023-06-09 
- 
                                  i黄金100g价格今天多少一克(2023年6月9日)金投网 2023-06-09 
- 
                                  每日关注!杰创智能(301248)6月8日主力资金净卖出860.41万元证券之星 2023-06-09 
- 
                                  全球热门:昔日日化巨头最新发布!重大资产置换方案来了,将告别日化业务!e公司微信号 2023-06-09 
- 
                                  环球热讯:杨宗纬最好听的10首歌_李宗盛给杨宗纬写的歌互联网 2023-06-09 
- 
                                  深圳姑娘王欣瑜晋级法网女双半决赛,实现个人大满贯新突破_世界热讯南方都市报 2023-06-09 
- 
                                  天天微资讯!演唱会等门票实名制后 通过“代拍”抢门票小心泄露个人信息北京青年报 2023-06-09 
- 
                                  三菱电梯无机房光幕怎么短接开关_三菱电梯无机房光幕怎么短接_天天快讯互联网 2023-06-09 
- 
                                  云南省德宏傣族景颇族自治州盈江县2023-06-06 20:34发布雷电黄色预警 天天热议互联网 2023-06-09 
- 
                                  女子将俩幼女锁房间月余致其饿死_以故意杀人罪判处无期徒刑互联网 2023-06-09 
- 
                                  重度宫颈炎能彻底治愈吗_重度宫颈炎症一般要治疗多久|全球今头条互联网 2023-06-09 
- 
                                  笔记本电脑待机后黑屏无法唤醒按开机键没用(笔记本电脑待机后黑屏无法唤醒)互联网 2023-06-09 
- 
                                  基金持仓动态金十期货6月9日讯,据外媒表示,交易商数据 环球热讯和讯冀文超 2023-06-09 
- 
                                  王座守护者游戏_王座守护者2互联网 2023-06-09 
- 
                                  今日视点:商朝为何叫商?纣王是昏君吗?至今难解车马之谜光明网 2023-06-09 
- 
                                  华商基金管理有限公司 关于旗下基金投资东方通 (300379.SZ)非公开发行股票的公告证券时报 2023-06-09 
- 
                                  海德股份半年报:净利润同比大增169.13% 积极拓展困境资产行业“新蓝海”|环球观察互联网 2023-06-09 
- 
                                  陆玛设计任命郑茜为公司财务负责人 2022年公司亏损2263.53万_全球最资讯挖贝网 2023-06-09 
- 
                                  永恒之戒手游升级攻略(永恒之戒哪里换)互联网 2023-06-09 
- 
                                  6月8日养老金调整方案公布了?达到65岁的能多涨钱?包括你吗?社保网 2023-06-09 
- 
                                  深入调研谋发展 乡村振兴强助力安青网 2023-06-09 
- 
                                  即时看!突发!中国电信全省崩溃,发生了什么?利好不断,A股明天要起飞?资鲸 2023-06-09 
- 
                                  四川省统计局局长被查中财网 2023-06-09 
- 
                                  时讯:北京石景山区纪委监委二级调研员杨水泉接受审查调查清风北京 2023-06-09 
- 
                                  营收下滑+“换帅”,游戏驿站盘后跌19%!市场不看好改变?资鲸 2023-06-09 
- 
                                  当前观察:地方税务局网站(地方税务局网上办税大厅)互联网 2023-06-09