簡體   English   中英

字典和函數基因映射輸出未返回預期頻率

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM