作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
几个小时以来我一直试图找出这个生物信息学代码有什么问题,但我看不到它。我的函数的各个部分似乎有效,但它没有看到某些模式。我使用滑动窗口函数来返回长度 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/
以下问题专门针对生物技术应用,但可以说明其他领域类似问题的一般原则。这是一个 NP 难问题,可能与旅行商问题有关,我很好奇可以使用哪些算法来得出解决方案。 生物背景简介:蛋白质由 20 种氨基酸组成。
我是一名优秀的程序员,十分优秀!