gpt4 book ai didi

python - 字典和函数基因映射输出未返回预期频率

转载 作者:行者123 更新时间:2023-12-01 06:28:37 28 4
gpt4 key购买 nike

几个小时以来我一直试图找出这个生物信息学代码有什么问题,但我看不到它。我的函数的各个部分似乎有效,但它没有看到某些模式。我使用滑动窗口函数来返回长度 k 的特定碱基对组合在一段文本中出现的次数。

我需要的第一个函数本质上创建核苷酸字符串四进制数的索引:

nucs = {'A':0,'C':1,'G':2,'T':3}
def PatternToNumber(Pattern):
index = 0
power = []
for i in range(len(Pattern)-1,-1,-1):
power.append(i)
for i in range(len(Pattern)):
index += nucs[Pattern[i]]*(4**power[i])
return index

我使用的下一个函数会迭代一段文本,并将 1 添加到频率数组中的索引。

def ComputingFrequencies(Text,k):
FrequencyArray = [0]*(4**k)
for i in range(len(Text)-k):
Pattern = Text[i:i+k]
index = PatternToNumber(Pattern)
FrequencyArray[index] += 1
print(*FrequencyArray)

就像我说的,我已经研究了每一行,它似乎可以很好地按照我期望的方式将核苷酸模式放入索引号中,但是您运行的输出:

ComputeFrequencies('ACGCGGCTCTGAAA',2)

是:

1 1 0 0 0 0 2 2 1 2 1 0 0 1 1 0

如果您查看 FrequencyArray 中的第一个数字,它会告诉我们字符串“AA”仅显示 1,但文本输入中的最后三个字符是“AAA”,这将意味着“AA”出现了两次,FrequencyArray 中的第一个条目应该是 2 而不是 1。我们应该期望的是:

2 1 0 0 0 0 2 2 1 2 1 0 0 1 1 0

如果我没有很好地解释它,如果需要,我可以尝试澄清一下我的代码。

最佳答案

我很确定您只是遇到了 1 误差。因为您只是没有检查到最后一个字符?

for i in range(len(Text)-k):

对于长度 2,它只会迭代到第一个 AA,因此您只会看到它一次。更改为

for i in range(len(Text)-(k-1)):

我认为这应该会给你你想要的。

关于python - 字典和函数基因映射输出未返回预期频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60011230/

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