Class ProjectedIndex<O,​I>

  • Type Parameters:
    O - Outer object type
    I - Inner object type
    All Implemented Interfaces:
    elki.index.Index, elki.index.KNNIndex<O>, elki.index.RangeIndex<O>, elki.index.RKNNIndex<O>

    public class ProjectedIndex<O,​I>
    extends java.lang.Object
    implements elki.index.KNNIndex<O>, elki.index.RKNNIndex<O>, elki.index.RangeIndex<O>
    Index data in an arbitrary projection.

    Note: be careful when using this class, as it may/will yield incorrect distances, depending on your projection! It may be desirable to use a modified index that corrects for this error, or supports specific combinations only.

    See LatLngAsECEFIndex and LngLatAsECEFIndex for example indexes that support only a specific (good) combination.

    FIXME: add refinement to bulk queries!

    Since:
    0.6.0
    Author:
    Erich Schubert
    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) elki.index.Index inner
      Inner index.
      (package private) double kmulti
      Multiplier for k.
      private static elki.logging.Logging LOG
      Class logger
      (package private) boolean norefine
      Refinement disable flag.
      (package private) elki.data.projection.Projection<O,​I> proj
      Projection.
      (package private) elki.logging.statistics.Counter refinements
      Count the number of distance refinements computed.
      (package private) elki.database.relation.Relation<? extends O> relation
      The relation we predend to index.
      (package private) elki.database.relation.Relation<I> view
      The view that we really index.
    • Constructor Summary

      Constructors 
      Constructor Description
      ProjectedIndex​(elki.database.relation.Relation<? extends O> relation, elki.data.projection.Projection<O,​I> proj, elki.database.relation.Relation<I> view, elki.index.Index inner, boolean norefine, double kmulti)
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void countRefinement()
      Count a single distance refinement.
      void initialize()  
      elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> kNNByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)  
      elki.database.query.knn.KNNSearcher<O> kNNByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)  
      void logStatistics()  
      elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> rangeByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxradius, int flags)  
      elki.database.query.range.RangeSearcher<O> rangeByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxradius, int flags)  
      elki.database.query.rknn.RKNNSearcher<elki.database.ids.DBIDRef> rkNNByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)  
      elki.database.query.rknn.RKNNSearcher<O> rkNNByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOG

        private static final elki.logging.Logging LOG
        Class logger
      • inner

        elki.index.Index inner
        Inner index.
      • proj

        elki.data.projection.Projection<O,​I> proj
        Projection.
      • relation

        elki.database.relation.Relation<? extends O> relation
        The relation we predend to index.
      • view

        elki.database.relation.Relation<I> view
        The view that we really index.
      • norefine

        boolean norefine
        Refinement disable flag.
      • kmulti

        double kmulti
        Multiplier for k.
      • refinements

        final elki.logging.statistics.Counter refinements
        Count the number of distance refinements computed.
    • Constructor Detail

      • ProjectedIndex

        public ProjectedIndex​(elki.database.relation.Relation<? extends O> relation,
                              elki.data.projection.Projection<O,​I> proj,
                              elki.database.relation.Relation<I> view,
                              elki.index.Index inner,
                              boolean norefine,
                              double kmulti)
        Constructor.
        Parameters:
        relation - Relation to index.
        proj - Projection to use.
        view - View to use.
        inner - Index to wrap.
        norefine - Refinement disable flag.
        kmulti - Multiplicator for k
    • Method Detail

      • countRefinement

        private void countRefinement()
        Count a single distance refinement.
      • initialize

        public void initialize()
        Specified by:
        initialize in interface elki.index.Index
      • logStatistics

        public void logStatistics()
        Specified by:
        logStatistics in interface elki.index.Index
      • kNNByObject

        public elki.database.query.knn.KNNSearcher<O> kNNByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                  int maxk,
                                                                  int flags)
        Specified by:
        kNNByObject in interface elki.index.KNNIndex<O>
      • kNNByDBID

        public elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> kNNByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                        int maxk,
                                                                                        int flags)
        Specified by:
        kNNByDBID in interface elki.index.KNNIndex<O>
      • rangeByObject

        public elki.database.query.range.RangeSearcher<O> rangeByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                        double maxradius,
                                                                        int flags)
        Specified by:
        rangeByObject in interface elki.index.RangeIndex<O>
      • rangeByDBID

        public elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> rangeByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                              double maxradius,
                                                                                              int flags)
        Specified by:
        rangeByDBID in interface elki.index.RangeIndex<O>
      • rkNNByObject

        public elki.database.query.rknn.RKNNSearcher<O> rkNNByObject​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                     int maxk,
                                                                     int flags)
        Specified by:
        rkNNByObject in interface elki.index.RKNNIndex<O>
      • rkNNByDBID

        public elki.database.query.rknn.RKNNSearcher<elki.database.ids.DBIDRef> rkNNByDBID​(elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                           int maxk,
                                                                                           int flags)
        Specified by:
        rkNNByDBID in interface elki.index.RKNNIndex<O>