在代码的两个版本中,v1和v2都是大向量(长度范围从1,000 1,000,000到len(v1)= len(v2)).我希望代码2比代码1更强大,但事实证明代码1更快,我不知道为什么.你能解释为什么代码2很慢吗?谢谢.
代码1:
norm1=math.sqrt(np.dot(v1,v1))
norm2=math.sqrt(np.dot(v2,v2))
kern=np.dot(v1,v2)/(norm1*norm2)
Run Code Online (Sandbox Code Playgroud)
代码2:
kern=0
for i in range(0, len(v1)):
kern+=min(v1[i], v2[i])
Run Code Online (Sandbox Code Playgroud) 我希望提高我的生物信息学算法的速度,这需要比较“A”、“C”、“G”、“T”之一的字符(例如计算“A”==“C”)
由于字符的大小为 8 位,因此在最坏的情况下需要对二进制数进行 8 次比较。我的猜测是,通过将 'A'、'C'、'G'、'T' 表示为一对二进制数(例如,将 'A' 表示为 make_pair(false,false)),我想我可以提高速度3~4 次,因为它现在最多只需要 2 次二进制比较。
我尝试使用一对布尔值,但速度实际上下降了大约 30%。
表示四个字符和计算相等性的最快方法是什么?内存使用对我来说并不是什么大问题。
供您参考,我使用的是 C++11 编译器。先感谢您。
我对计算机了解不多,所以我的问题很幼稚。
我了解到,C 代码的编译在编译过程中会在主内存中的堆栈中保留特定的内存空间。
然后,
为什么在一台计算机上编译并复制到另一台计算机上的可执行文件可以工作?
如果编译保留 RAM 的特定内存位置,那么可执行文件(或编译)的数量是否受 RAM 大小的限制?
如果编译在 RAM 中保留空间,为什么可执行文件比预编译的 .C 文本文件占用更多的磁盘空间?
谢谢