如何控制序列比对的片段

时间:2017-04-25 16:22:03

标签: python python-2.7 alignment

我想用给定的“对齐窗口”比较两个序列,即如果序列在五个或更多的一段中是相似的。

例如:

A = "CCCTCGTTGCTAAAAA"
B = "CCCAGCAACGAAAAAA"

我想在矩阵上标记最后5个字符

现在我遇到了类似的事情:

import numpy as np


A = "CCCTCGTTGCTAAAAA"
B = "CCCAGCAACGAAAAAA"
n1 = len(A)
n2 = len(B)
data = np.zeros(shape=(n2, n1), dtype=np.int)

for i in range(n2):
for j in range(n1):
    if A[i:i+4] == B[j:j+4]:
        data[i:i+4,j:j+4] = 1
print data

感谢您的帮助

使用python 2.7.3

1 个答案:

答案 0 :(得分:0)

下面是一个有效的例子。注意+5而不是+4,因为从i中使用Python进行列表切片:i + 1表示请求一个字符。另外,由于检查短于5个字符的部分没有意义,因此可以减少n1和n2。

import numpy as np


A = "CCCTCGTTGCTAAAAA"
B = "CCCAGCAACGAAAAAA"
n1 = len(A) - 4
n2 = len(B) - 4
data = np.zeros(shape=(n2, n1), dtype=np.int)


for i in range(n2):
    for j in range(n1):
        if A[i:i+5] == B[j:j+5]:
            data[i:i+5,j:j+5] = 1
print(data)

使用此代码,您将获得两次点击,一次是针对" CCCAGCAACG AAAAA A"使用字符串A的最后一部分,一次用于" CCCAGCAACGA AAAAA ",也包含字符串A的最后一部分。

希望这有帮助。