与 Python 相比,C++速度有多快?
Posted AI职通车
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与 Python 相比,C++速度有多快?相关的知识,希望对你有一定的参考价值。
译者:ss3b3、成语风、Born alone°
来源:AI研习社
大概有着数百万个理由钟情于Python(特别对于数据科学家来说)。但是Python和像C/C++这种更为贴近底层的编程语言有多少不同呢?我猜不论是数据科学家们还是Python的用户都想知道答案。Python和以C++为代表的其他底层语言有着很多不同点。在这篇文章中,我将会通过一个特别简单的例子展示与Python相比,C++的速度有多快。
为了真实地展示差异性,我决定进行一个简单且实用的任务,而不是一个虚构的任务。在这个任务中我将要完成的是对于一个固定的值“k”产生所有DNA k-mers的可能。如果你对DNA k-mers一无所知,我在下一章节用尽可能简单直白的语言解释了它。选择这个例子的原因是许多基因相关的数据处理和分析任务(例如 k-mers generation)被认为是计算密集型任务。这是也是很多在生物信息学领域的数据科学家对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, etc.
所面临的挑战
对于本文,我们将生成所有可能的13-mers。在数学上,它是一个置换问题的置换问题。因此,我们有4¹³(=67,108,864)可能的13-mers。我使用一个简单的算法在 C++ 和 Python 中生成结果。让我们来看看解决方案并进行比较。
比较方案
using namespace std;
char convert(char c)
{
if (c == 'A') return 'C';
if (c == 'C') return 'G';
if (c == 'G') return 'T';
if (c == 'T') return 'A';
return ' ';
}
int main()
{
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 can uncomment 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 to see all k-mers.
// cout << s << endl;
cout << "Number of generated k-mers: " << counter << endl;
cout << "Finish!" << endl;
return 0;
}
投稿、转载、媒介合作联系微信号 | bajiaojiao-sz 商务合作联系微信号 | LJ18825253481
以上是关于与 Python 相比,C++速度有多快?的主要内容,如果未能解决你的问题,请参考以下文章
与锁相比,原子/互锁变量有多快,无论是不是存在争用? [复制]