随机的超度树

2024-09-30 02:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python上实现了一个生成随机二叉树的程序。所以现在我想给树的每个内部节点分配一个距离,使其超度量。然后,根和任何叶子之间的距离必须相同。如果节点是叶子,则距离为空。这是一个节点:

class Node() :
    def __init__(self, G = None , D = None) :
        self.id = ""
        self.distG = 0
        self.distD = 0
        self.G = G
        self.D = D
        self.parent = None

我的想法是在开始时设置距离h,并在找到内部节点时减小它,但它只在左侧工作。你知道吗

def lgBrancheRand(self, h) :
    self.distD = h
    self.distG = h
    hrandomD = round(np.random.uniform(0,h),3)
    hrandomG = round(np.random.uniform(0,h),3)
    if self.D.D is not None :
        self.D.distD = hrandomD
        self.distD = round(h-hrandomD,3)
        lgBrancheRand(self.D,hrandomD)
    if self.G.G is not None :
        self.G.distG = hrandomG
        self.distG = round(h-hrandomG,3)
        lgBrancheRand(self.G,hrandomG)

Tags: selfnone距离if节点defnprandom
1条回答
网友
1楼 · 发布于 2024-09-30 02:18:37

总之,您将创建随机矩阵并对每个矩阵应用UPGMA。你知道吗

下面有更完整的答案

只需使用UPGMA算法。这是一种用于解析成对矩阵的聚类算法。你知道吗

取两对“类群”(技术上称为OTUs)之间的总遗传距离除以2。将成对矩阵中最接近的成员指定为第一个“节点”。重新格式化矩阵,使这两对组合成一个组(“删除”),然后无限查找下一个“最近邻”。我怀疑R'ape会有一个超度量算法,它会把你从编程中解救出来。我看到您使用的是Python,所以BioPython可能有这个(很大的可能),我个人会通过一个预编译的C程序来实现这一点,并通过paup之类的东西来收集结果。我不打算写代码,因为我更喜欢Perl,如果有任何Perl代码出现在Python问题(帝国已经建立)中,我会大发雷霆。你知道吗

无论如何,你会发现这个算法产生了一个完美的超度量树。纯粹的人不喜欢通过这种算法导出的超度量树。然而,在您的计算中,它可能是有用的,因为您可以从实际数据中找到系统发展史,这与您正在生成的空分布相比是最“时钟式”的。在这种情况下,这将是很酷的。你知道吗


你可能更愿意提出生物信息学的问题。你知道吗

相关问题 更多 >

    热门问题