// compute mAP/MeanRank rankings, for general continuous distances namespace rogueviz { namespace embeddings { rankinfo continuous_ranks() { rankinfo ri; int N = get_n(); if(1) { progressbar pb(N/threads, "continuous ranks"); std::mutex lock; parallelize(N, [&] (int a, int b) { ld ltot_ranks = 0, ltot_rby = 0, ltot_map = 0, ltot_n = 0; for(int i=a; i> dists(N); // println(hlog, i, ": ", dists); for(int j=0; jdistance(i, j), 0}; for(auto e: directed_edges[i]) dists[e].second = 1; /* for(auto& d: dists) if(d.second == 0) d.first += 0.5; vector ba(MAXDIST, 0), bb(MAXDIST, 0); for(auto& d: dists) { if(d.second == 1) ba[d.first]++; bb[d.first]++; } */ /* bb[0]--; print(hlog, i, ": "); for(int d=0; d ranks; int seen = 0; int bad = 0; ld for_map = 0; // note: i itself is in first position for(int j=0; seen lk(lock); ri.rby += ltot_rby; ri.map += ltot_map; ri.ranks += ltot_ranks; ri.n += ltot_n; return 0; }); } println(hlog, "MeanRank = ", ri.ranks / ri.rby, " MAP = ", ri.map / ri.n); println(hlog, "data: ", tie(ri.rby, ri.map, ri.ranks, ri.n, N)); return ri; } }}