gpt4 book ai didi

python - 如何优化运行 4**k 次的 python 脚本?

转载 作者:太空狗 更新时间:2023-10-29 21:08:32 26 4
gpt4 key购买 nike

编程语言:Python 3.4

我为 Coursera 的生物信息学 1 类(class)编写了程序。该程序运行正常,但对于大型数据集非常慢。我猜,这是因为循环运行了 4**k 次,其中 k 是传递给函数的子字符串的长度。输入:字符串 TextPattern 以及一个整数 d。输出:Pattern 出现为 Text 的子字符串的所有起始位置,最多 d 次不匹配。

这是我的代码:

def MotifCount(string1, substring, d):
k = 4 ** (len(substring))
codeArray = list(itertools.product(['A', 'C', 'G', 'T'], repeat=len(substring)))
for i in range(k):
codeArray2 = ''.join(list(codeArray[i]))
HammingValue = HammingDistance(codeArray2, substring)
if HammingValue <= d:
for j in range(len(string1)):
if(string1.find(codeArray2, j) == j):
print(j)



def HammingDistance(string_1, string_2):
length_1 = len(string_1)
length_2 = len(string_2)
count = 0
for i in range(length_1):
if string_1[i] != string_2[i]:
count += 1
return count

示例输入:

CGCCCGAATCCAGAACGCATTCCCATATTTCGGGACCACTGGCCTCCACGGTACGGACGTCAATCAAAT
ATTCTGGA
3

输出:

6 7 26 27

我想针对更大的数据集优化此代码。有什么办法可以减少代码的运行时间吗?

最佳答案

import itertools

def HammingDistance(string_1, string_2):
assert len(string_1) == len(string_2)
return sum(c1 != c2 for c1, c2 in zip(string_1, string_2))

def MotifCount(string1, substring, d):
for i in range(len(string1) - len(substring) + 1):
if HammingDistance(string1[i:i+len(substring)], substring) <= d:
print(i)

MotifCount("CGCCCGAATCCAGAACGCATTCCCATATTTCGGGACCACTGGCCTCCACGGTACGGACGTCAATCAAAT", "ATTCTGGA", 3)

它给出:

6
7
26
27

很快。

关于python - 如何优化运行 4**k 次的 python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31086204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com