在其他序列中找到频率最高的序列

Find the most freq sequence amongst other sequences

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

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

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

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

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

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))))