强者⼀出,谁与争锋?与Python相⽐,C++的运⾏速度究竟有多快?
对于数据科学家⽽⾔,热爱Python的理由数不胜数。但你是否也曾问过这样的问题:Python和C或C++等更专业的低级编程语⾔究竟有何不同呢?我想这是很多数据科学家或者Python⽤户曾经问过或者将来会问⾃⼰的问题。
Python和C++类语⾔之间存在许多区别,本⽂将通过⼀个⼗分简单的例⼦向你展⽰,与Python相⽐,C++究竟有多快。
为了说明这种区别,本⽂选择⼀个简单实⽤⽽⾮想象虚构的任务:⽣成固定值为“k”的所有可能DNA k-mers。选择该⽰例,是因为与基因组相关的许多数据处理和任务分析(例如k-mers⽣成)都是计算密集型的,⽽这同样也是很多⽣物信息学领域的数据科学家对C++感兴趣的原因。
请注意,本⽂⽬标并不是以最有效的⽅式⽐较C++和Python。这两种代码均可采⽤更⾼效的⽅式和更优化的⽅法编写。本⽂的唯⼀⽬标,就是⽐较这两种语⾔在使⽤完全相同的算法和指令时的速度。
配置远程地址git>tcp ip协议简要分析论文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编写。
运⾏Python代码,⽣成全部13-mers共6700万个⼤约需要61.23秒。为了公平⽐较,我注释掉了显⽰k-mers的⾏。如果想在⽣成k-mers时显⽰它们,也可以取消对这两⾏的注释。注意,显⽰全部k-mers耗时很长。如有需要,请操作CTRL+C中⽌代码。
现在,来看看C++中同样的算法:
编译后,运⾏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++类语⾔。mvc介绍
如果你想更好的提升你的编程能⼒,学好C语⾔C++编程!弯道超车,快⼈⼀步!
【】,分享(源码、项⽬实战视频、项⽬笔记,基础⼊门教程)
易语言模块查看器
欢迎转⾏和学习编程的伙伴,利⽤更多的资料学习成长⽐⾃⼰琢磨更快哦!python入门教程视屏
编程学习书籍:
编程学习视频:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论