2015-01-29 9 views

Odpowiedz

12

Potrzebujesz macierzy powiązań Z, która jest wejściem do funkcji scipy dendrogram, i przekonwertuj ją do formatu Newick. Dodatkowo potrzebna jest lista "leaf_names" z nazwami liści. Oto funkcja, która wykona zadanie:

from scipy.cluster import hierarchy 
def getNewick(node, newick, parentdist, leaf_names): 
    if node.is_leaf(): 
     return "%s:%.2f%s" % (leaf_names[node.id], parentdist - node.dist, newick) 
    else: 
     if len(newick) > 0: 
      newick = "):%.2f%s" % (parentdist - node.dist, newick) 
     else: 
      newick = ");" 
     newick = getNewick(node.get_left(), newick, node.dist, leaf_names) 
     newick = getNewick(node.get_right(), ",%s" % (newick), node.dist, leaf_names) 
     newick = "(%s" % (newick) 
     return newick 

tree = hierarchy.to_tree(Z,False) 
getNewick(tree, "", tree.dist, leaf_names)