The sequential index
Inheritance: BasicIndex
コード例 #1
0
ファイル: PivotGroup.cs プロジェクト: vfaby/natix
 public void Build(MetricDB DB, double alpha_stddev, int min_bs, int seed)
 {
     DynamicSequential idxDynamic;
     idxDynamic = new DynamicSequential (seed);
     idxDynamic.Build (DB);
     this.pivots_list = new List<int>();
     this.pivots_idx = new int[DB.Count];
     this.pivots_dist = new float[DB.Count];
     // PivotGroup g = new PivotGroup(DB.Count);
     //Console.WriteLine ("Number of objects: {0}",idxDynamic.DOCS.Count);
     int I = 0;
     while(idxDynamic.DOCS.Count > 0){
         var pidx = idxDynamic.GetRandom();
         object piv = DB[pidx];
         idxDynamic.Remove(pidx);
         this.pivots_list.Add(pidx);
         this.pivots_dist[pidx] = 0;
         this.pivots_idx[pidx] = pidx;
         double mean, stddev;
         IResult near, far;
         idxDynamic.SearchExtremesRange(piv, alpha_stddev, min_bs, out near, out far, out mean, out stddev);
         foreach (var pair in near){
             this.pivots_idx[pair.docid] = pidx;
             this.pivots_dist[pair.docid] = (float)pair.dist;
         }
         foreach (var pair in far){
             this.pivots_idx[pair.docid] = pidx;
             this.pivots_dist[pair.docid] = (float)-pair.dist;
         }
         if (I % 10 == 0) {
             Console.WriteLine("--- I {0}> remains: {1}, alpha_stddev: {2}, mean: {3}, stddev: {4}, pivot: {5}",
                               I, idxDynamic.DOCS.Count, alpha_stddev, mean, stddev, pidx);
             double near_first, near_last, far_first, far_last;
             if (near.Count == 0) {
                 near_first = -1;
                 near_last = -1;
             } else {
                 near_first = near.First.dist;
                 near_last = near.Last.dist;
             }
             if (far.Count == 0) {
                 far_last = far_first = -1;
             } else {
                 far_first = -far.Last.dist;
                 far_last = -far.First.dist;
             }
             Console.WriteLine("--- +++ first-near: {0}, last-near: {1}, first-far: {2}, last-far: {3}, near-count: {4}, far-count: {5}",
                               near_first, near_last, far_first, far_last, near.Count, far.Count);
             Console.WriteLine("--- +++ normalized first-near: {0}, last-near: {1}, first-far: {2}, last-far: {3}, mean: {4}, stddev: {5}",
                               near_first/far_last, near_last/far_last, far_first/far_last, far_last/far_last, mean/far_last, stddev/far_last);
             //}
         }
         ++I;
         idxDynamic.Remove(near);
         idxDynamic.Remove(far);
         //Console.WriteLine("Number of objects after: {0}",idxDynamic.DOCS.Count);
     }
     Console.WriteLine("Number of pivots per group: {0}", this.pivots_list.Count);
 }
コード例 #2
0
 protected override void SearchExtremes(DynamicSequential idx, List<ItemPair> items, object piv, double quantile, int min_bs, out IResult near, out IResult far, out DynamicSequential.Stats stats)
 {
     items.Clear();
     idx.ComputeDistances (piv, items, out stats);
     DynamicSequential.SortByDistance(items);
     var n = idx.Count;
     min_bs = Math.Max ((int)(quantile * n), min_bs);
     near = new Result (min_bs);
     far = new Result (min_bs);
     idx.AppendKExtremes(near, far, items);
 }
コード例 #3
0
 protected override void SearchExtremes(DynamicSequential idx, List<ItemPair> items, object piv, double alpha_stddev, int min_bs, out IResult near, out IResult far, out DynamicSequential.Stats stats)
 {
     items.Clear();
     idx.ComputeDistances (piv, items, out stats);
     //            var radius = stats.min; // stats.stddev * alpha_stddev;
     near = new Result (min_bs);
     far = new Result (min_bs);
     //            idx.DropCloseToMean (stats.mean - radius, stats.mean + radius, near, far, items);
     //            if (near.Count == 0 && far.Count == 0 & min_bs > 0) {
         idx.AppendKExtremes(near, far, items);
     //            }
 }
コード例 #4
0
ファイル: PivotGroup.cs プロジェクト: sadit/natix
 protected virtual void SearchExtremes(DynamicSequential idx, List<ItemPair> items, object piv, double alpha_stddev, int min_bs, out IResult near, out IResult far, out DynamicSequential.Stats stats)
 {
     throw new NotSupportedException();
 }