这个问题涉及到计算一组DNA字符串的p距离矩阵。p距离是衡量序列间进化距离的一种方法。以下是问题和过程的详细说明:
理解P距离:两个DNA字符串之间的p距离是指在相应位置上两个字符串不同的核苷酸比例。数学上来说,如果你有两个长度相同的字符串s1
和s2
,那么p距离dp(s1, s2)
就是不同位置的数量除以字符串的总长度。
距离矩阵:距离矩阵D
是一个方阵,其中每个元素Di,j
代表数据集中第i
个和第j
个DNA字符串之间的p距离。
? ? ?3. 如何构建距离矩阵:
???????????假设我们有4条DNA序列。
? ? ? ? ? ?我们需要比较每一对序列,计算它们之间的p距离。
? ? ? ? ? ?然后把这些p距离放在一个表格(矩阵)中。这个表格有4行4列,因为我们有4条序列。
? ? ? ? ? ?每行和每列代表一条序列。表格中的每个数字都是两条序列之间的p距离。
https://rosalind.info/problems/pdst/
from method import fasta
name_list,value_list = fasta('')
def hamm(a,b):
count = 0
for i in range(len(a)):
if a[i] != b[i]:
count+=1
return float(count/len(a))
#value_list = ['TTTCCATTTA','GATTCATTTC','TTTCCATTTT','GTTCCATTTA']
ans = []
for i in value_list:
temp = []
for j in value_list:
temp.append('{:.5f}'.format(hamm(i, j)))
ans.append(temp)
for i in ans:
print(' '.join(i))