[英]Dictionary and function gene mapping output not returning expected frequencies
幾個小時以來,我一直試圖弄清楚這個生物信息學代碼有什么問題,但我看不到它。 我的功能的各個部分似乎可以工作,但沒有看到某些模式。 我正在使用滑動窗口函數來返回長度為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)):
我認為這應該給你你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.