gpt4 book ai didi

python - ete2如果一个节点是一对坐标怎么操作

转载 作者:行者123 更新时间:2023-12-01 05:21:56 24 4
gpt4 key购买 nike

我需要存储然后操作(添加新节点、搜索等)一棵树,其中每个节点都是一对 x,y 坐标。我发现 ete2 模块可以处理树,但我不知道如何将节点保存为元组或坐标列表。 ete2可以吗?

编辑:

我按照这里的教程 http://pythonhosted.org/ete2/tutorial/tutorial_trees.html#trees创建一个简单的树:

t1 = Tree("(A:1,(B:1,(E:1,D:1):0.5):0.5);" )

其中 A、B、C 是节点的名称,数字是距离。

t2 = Tree( "(A,B,(C,D));" )

我不需要名称或距离,而是需要元组或列表树,例如:

t3 = Tree("([12.01, 10.98], [15.65, 12.10],([21.32, 6.31], [14.53, 10.86]));")

但是最后一个输入返回语法错误,在有关 ete2 的教程中我找不到任何类似的示例。作为一种变体,我认为我可以将坐标保存为属性,但将属性存储为字符串。我需要使用坐标进行操作,每次从字符串遍历到 float 都很棘手,反之亦然。

最佳答案

您可以annotate ete trees使用任何类型的数据。只需为每个节点命名,使用这些名称创建树结构,并用坐标注释树即可。

from ete2 import Tree

name2coord = {
'a': [1, 1],
'b': [1, 1],
'c': [1, 0],
'd': [0, 1],
}

# Use format 1 to read node names of all internal nodes from the newick string
t = Tree('((a:1.1, b:1.2)c:0.9, d:0.8);', format=1)

for n in t.get_descendants():
n.add_features(coord = name2coord[n.name])

# Now you can operate with the tree and node coordinates in a very easy way:
for leaf in t.iter_leaves():
print leaf.name, leaf.coord
# a [1, 1]
# b [1, 1]
# d [0, 1]

print t.search_nodes(coord=[1,0])
# [Tree node 'c' (0x2ea635)]

您可以使用 pickle 复制、保存和恢复带注释的树:

t.copy('cpickle')
# or
import cPickle
cPickle.dump(t, open('mytree.pkl', 'w'))
tree = cPickle.load(open('mytree.pkl'))

关于python - ete2如果一个节点是一对坐标怎么操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com