我想用给定的“对齐窗口”比较两个序列,即如果序列在五个或更多的一段中是相似的。
例如:
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
答案 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的最后一部分。
希望这有帮助。