Exemplo n.º 1
0
def split_nj(D):
    """
    Split a distance matrix according to the neighbor joining criterion.
    @param D: a distance matrix
    @return: a set of two index sets defining a split of the indices
    """
    n = len(D)
    # there is no reason to split a 3x3 distance matrix
    assert n > 3, n
    Q = Euclid.edm_to_q(D)
    pairs = [(i, j) for i in range(n) for j in range(n) if i < j]
    best_value, best_pair = min((Q[pair], pair) for pair in pairs)
    return full_split(best_pair, range(n))
Exemplo n.º 2
0
def split_nj(D):
    """
    Split a distance matrix according to the neighbor joining criterion.
    @param D: a distance matrix
    @return: a set of two index sets defining a split of the indices
    """
    n = len(D)
    # there is no reason to split a 3x3 distance matrix
    assert n > 3, n
    Q = Euclid.edm_to_q(D)
    pairs = [(i, j) for i in range(n) for j in range(n) if i < j]
    best_value, best_pair = min((Q[pair], pair) for pair in pairs)
    return full_split(best_pair, range(n))