gpt4 book ai didi

python - 将 hcluster 生成的 ndarray 转换为 Newick 字符串以用于 ete2 包

转载 作者:太空狗 更新时间:2023-10-30 01:23:44 26 4
gpt4 key购买 nike

我有一个通过运行创建的向量列表:

import hcluster
import numpy as np
from ete2 import Tree

vecs = [np.array(i) for i in document_list]

其中 document_list 是我正在分析的网络文档的集合。然后我执行层次聚类:

Z = hcluster.linkage(vecs, metric='cosine') 

这会生成一个 ndarray,例如:

[[ 12.          19.           0.           1.        ]
[ 15. 21. 0. 3. ]
[ 18. 22. 0. 4. ]
[ 3. 16. 0. 7. ]
[ 8. 23. 0. 6. ]
[ 5. 27. 0. 6. ]
[ 1. 28. 0. 7. ]
[ 0. 21. 0. 2. ]
[ 5. 29. 0.18350472 2. ]
[ 2. 10. 0.18350472 3. ]
[ 47. 30. 0.29289577 9. ]
[ 13. 28. 0.29289577 13. ]
[ 73. 32. 0.29289577 18. ]
[ 26. 12. 0.42264521 5. ]
[ 5. 33. 0.42264521 12. ]
[ 14. 35. 0.42264521 12. ]
[ 19. 35. 0.42264521 18. ]
[ 4. 20. 0.31174826 3. ]
[ 34. 21. 0.5 19. ]
[ 38. 29. 0.31174826 21. ]]

是否可以将此 ndarray 转换为可传递给 ete2 Tree() 构造函数的 newick 字符串,以便我可以使用 ete2 提供的工具绘制和操作 newick 树?

尝试这样做是否有意义,如果没有,我可以使用相同的数据和 ete2 生成树/树状图的另一种方法(我意识到还有其他包可以绘制树状图,例如 dendropy 和hcluster 本身,但更愿意使用 ete2)?

谢谢!

最佳答案

我使用以下方法来处理几乎相同的事情:

from hcluster import linkage, to_tree
from ete2 import Tree

#hcluster part
Y = dist_matrix(items, dist_fn)
Z = linkage(Y, "single")
T = to_tree(Z)

#ete2 section
root = Tree()
root.dist = 0
root.name = "root"
item2node = {T: root}

to_visit = [T]
while to_visit:
node = to_visit.pop()
cl_dist = node.dist /2.0
for ch_node in [node.left, node.right]:
if ch_node:
ch = Tree()
ch.dist = cl_dist
ch.name = str(ch_node.id)
item2node[node].add_child(ch)
item2node[ch_node] = ch
to_visit.append(ch_node)

# This is your ETE tree structure
tree = root

关于python - 将 hcluster 生成的 ndarray 转换为 Newick 字符串以用于 ete2 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364609/

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