示例#1
0
def unifrac_mix(As, otusid, t):
    #unifracc a partir de una matriz sparse pero luego utilizando slice de columna densos al comparar muestras
    As.convert('csc')
    m, n = As.shape
    dist_vec, pos = readtree(t, otusid)
    dist = numpy.zeros([n, n])
    x = numpy.zeros(m, bool)
    x[As._unpkd_ax[As._pkd_ax[0]:As._pkd_ax[1]]] = True
    x = dev_vec(pos, x)
    for i in range(n):
        for j in range(n - 1, i, -1):
            y = numpy.zeros(m, bool)
            y[As._unpkd_ax[As._pkd_ax[j]:As._pkd_ax[j + 1]]] = True
            y = dev_vec(pos, y)
            dist[i, j] = dist[j, i] = calc_dist3(x, y, dist_vec)
        x = y
    return dist
示例#2
0
def unifrac_mix_weighted2(As, otusid, t):
    As.convert('csc')
    m, n = As.shape
    dist_vec, pos = readtree(t, otusid)
    dist = numpy.zeros([n, n])
    x = numpy.zeros(m)
    x[As._unpkd_ax[As._pkd_ax[0]:As._pkd_ax[1]]] = As._values[As._pkd_ax[0]:As.
                                                              _pkd_ax[1]]
    sx = sum(x)
    x = dev_vec_weighted(dist_vec, pos, x)
    for i in range(n):
        for j in range(n - 1, i, -1):
            y = numpy.zeros(m)
            y[As._unpkd_ax[As._pkd_ax[j]:As._pkd_ax[j + 1]]] = As._values[
                As._pkd_ax[j]:As._pkd_ax[j + 1]]
            sy = sum(y)
            y = dev_vec_weighted(dist_vec, pos, y)
            dist[i, j] = dist[j,
                              i] = calc_dist_weighted(x, y, dist_vec, sx, sy)
        x = y
        sx = sy
    return dist