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
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