首页 > 解决方案 > 在其他序列中找到频率最高的序列

问题描述

我得到了 10 个 DNA 序列,每个序列由 18 个碱基组成,我被要求编写一个程序来计算所有这些序列中最常见的序列(共识)。例如,假设我有“ACTGGA”、“ACCAAT”、“CTTAGG”、“ATGAAG”

共有序列将是“A(CT)TA(GA)G”,因为在每个序列的第一个碱基位置“A”存在 3/4 次。对于每个序列的第二个碱基位置,我有 2 个带有“C”的序列和 2 个带有 "T" 的序列。到目前为止,我的共识序列看起来像 A(CT),因为我已经确定“A”在位置 1 出现 75% 的时间,而位置 2 有 50-50% 的机会出现“T”或“C”等.所以,我将在我的共识的第二个位置包括“C”和“T”。现在我正在尝试使用 pycharm 在 python 中执行此操作,即使我不是很熟悉它。我只是想推动自己学习新的东西。我的问题是,当我将 txt 文件读入这样的 numpy 数组时:

seq_array = np.asarray(list(map(str.strip, seq)))

我的数组最终变成像 (10,) 而不是 (10,18) 的 1d,所以我不能遍历每一行和每一列来计算每个字符。那么如何将文件读入 2d 大小(10,18)?而不是迭代 every seq_array[r][c],有没有更快的方法可以到达最频繁的序列?

标签: pythonnumpybioinformaticsdna-sequence

解决方案


您在生成多维数组时遇到的问题:

list(map(str.strip, seq))  # Returns a list of strings

list(map(list, map(str.strip, seq)))  # Will return a list of lists

seq_array = np.asarray(list(map(list, map(str.strip, seq))))

推荐阅读