Python 下三角矩阵
我正在尝试创建一个没有导入的模型(尽管我在开始时使用了数学导入)。我编写的函数获取一个DNA序列列表,并对它们进行比较,然后在列表中输入一个浮点数。然而,问题是我意外地创建了上三角形。这是我的代码(我将包括其他函数,以便它可能有意义): 它输出:Python 下三角矩阵,python,python-3.x,Python,Python 3.x,我正在尝试创建一个没有导入的模型(尽管我在开始时使用了数学导入)。我编写的函数获取一个DNA序列列表,并对它们进行比较,然后在列表中输入一个浮点数。然而,问题是我意外地创建了上三角形。这是我的代码(我将包括其他函数,以便它可能有意义): 它输出: [[0.08833727674228764, 0.30409883108112323, 0.6081976621622466], [0.4408399986765892, 0.8239592165010822], [0.188485821210
[[0.08833727674228764, 0.30409883108112323, 0.6081976621622466],
[0.4408399986765892, 0.8239592165010822],
[0.18848582121067953],
[]]
但我希望它能输出:
[[],
[0.08833727674228764],
[0.30409883108112323, 0.4408399986765892],
[0.6081976621622466, 0.8239592165010822, 0.18848582121067953]]
sequence\u difference
返回两个序列在频率上的不同程度。jukes\u-cantor
返回序列在进化过程中实际变化量的正确估计值。打印此行矩阵。在该for循环下方追加([]),用于范围(i+1,len(seq的列表)):矩阵[i]。追加(jukes\u-cantor(sequence\u-difference(sequence\u-of-seq[j],list\u-of-seq[i])
当前,它在上面,因此它是首先执行的。只需反转
i
和j
的索引即可:
from math import log
def sequence_difference(seq1, seq2):
counter = 0
if len(seq1) == len(seq2):
for i in range(len(seq1)):
if seq1[i] != seq2[i]:
counter += 1
return counter / len(seq1)
else:
return ''
def jukes_cantor(diff):
K = -(3/4) * log(1 - (4/3) * diff)
return K
def lower_trian_matrix(list_of_seq):
matrix = [[]]
for i in range(1, len(list_of_seq)):
matrix.append([])
for j in range(i):
matrix[i].append(jukes_cantor(sequence_difference(list_of_seq[j], list_of_seq[i])))
return matrix
sequences = ['TAAAAAAAAAAA',
'TTAAAAAAAAAA',
'AAAAAAAAAAGG',
'AAAAAAAAGGGG']
print(lower_trian_matrix(sequences))
或者,将其重命名为
def upper\u trian\u matrix(以下列表):
并告诉您的老师,您一直想创建上三角形。“不导入(尽管我在开始时使用数学导入)”-?你是说没有第三方图书馆吗?如果您有导入,请将它们包含在上面的代码中,因此这是一个错误。你也没有提供输入。我们应该如何运行这个?我不使用任何库。这是一个学校的项目,我们不允许使用图书馆,除了数学图书馆。我在一开始就用这个:从数学导入日志中,请用必要的信息回答问题,我希望现在更容易看。:)这是可以理解的。你是新来的,我很乐意帮忙!试着从我对你的问题所做的编辑中学习一个问题应该是什么样子的,并确保(再次)复习一些基本的东西,以及如何提供答案。你也可以坐飞机。祝你好运现在它返回:[[0.08833727674228764,0.30409883108112323,0.60819776621622466],[0.4408399986765892,0.8239592165010822],[0.18848582121067953],[],[],[]。@RuneToft请参见
from math import log
def sequence_difference(seq1, seq2):
counter = 0
if len(seq1) == len(seq2):
for i in range(len(seq1)):
if seq1[i] != seq2[i]:
counter += 1
return counter / len(seq1)
else:
return ''
def jukes_cantor(diff):
K = -(3/4) * log(1 - (4/3) * diff)
return K
def lower_trian_matrix(list_of_seq):
matrix = [[]]
for i in range(1, len(list_of_seq)):
matrix.append([])
for j in range(i):
matrix[i].append(jukes_cantor(sequence_difference(list_of_seq[j], list_of_seq[i])))
return matrix
sequences = ['TAAAAAAAAAAA',
'TTAAAAAAAAAA',
'AAAAAAAAAAGG',
'AAAAAAAAGGGG']
print(lower_trian_matrix(sequences))