Class PrecomputedSimilarityMatrix<O>

  • Type Parameters:
    O - Object type
    All Implemented Interfaces:
    elki.index.Index, elki.index.SimilarityIndex<O>, elki.index.SimilarityRangeIndex<O>

    public class PrecomputedSimilarityMatrix<O>
    extends java.lang.Object
    implements elki.index.SimilarityIndex<O>, elki.index.SimilarityRangeIndex<O>
    Precomputed similarity matrix, for a small data set.

    This class uses a linear memory layout (not a ragged array), and assumes symmetry as well as strictness. This way, it only stores the upper triangle matrix with double precision. It has to store (n-1) * (n-2) similarity values in memory, requiring 8 * (n-1) * (n-2) bytes. Since Java has a size limit of arrays of 31 bits (signed integer), we can store at most \(2^16\) objects (precisely, 65536 objects) in a single array, which needs about 16 GB of RAM.

    Since:
    0.7.0
    Author:
    Erich Schubert
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private elki.database.ids.DBIDRange ids
      DBID range.
      private static elki.logging.Logging LOG
      Class logger.
      private double[] matrix
      Similarity matrix.
      protected elki.database.relation.Relation<O> relation
      The representation we are bound to.
      protected elki.similarity.Similarity<? super O> similarityFunction
      Nested similarity function.
      protected elki.database.query.similarity.SimilarityQuery<O> similarityQuery
      Nested similarity query.
      private int size
      Size of DBID range.
    • Constructor Summary

      Constructors 
      Constructor Description
      PrecomputedSimilarityMatrix​(elki.database.relation.Relation<O> relation, elki.similarity.Similarity<? super O> similarityFunction)
      Constructor.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private int getOffset​(int x, int y)
      Array offset computation.
      elki.database.query.similarity.SimilarityQuery<O> getSimilarityQuery​(elki.similarity.Similarity<? super O> similarityFunction)  
      void initialize()  
      void logStatistics()  
      elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> similarityRangeByDBID​(elki.database.query.similarity.SimilarityQuery<O> simQuery, double maxradius, int flags)  
      elki.database.query.range.RangeSearcher<O> similarityRangeByObject​(elki.database.query.similarity.SimilarityQuery<O> simQuery, double maxrange, int flags)  
      protected static int triangleSize​(int x)
      Compute the size of a complete x by x triangle (minus diagonal).
      • 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.
      • relation

        protected final elki.database.relation.Relation<O> relation
        The representation we are bound to.
      • similarityFunction

        protected elki.similarity.Similarity<? super O> similarityFunction
        Nested similarity function.
      • similarityQuery

        protected elki.database.query.similarity.SimilarityQuery<O> similarityQuery
        Nested similarity query.
      • matrix

        private double[] matrix
        Similarity matrix.
      • ids

        private elki.database.ids.DBIDRange ids
        DBID range.
      • size

        private int size
        Size of DBID range.
    • Constructor Detail

      • PrecomputedSimilarityMatrix

        public PrecomputedSimilarityMatrix​(elki.database.relation.Relation<O> relation,
                                           elki.similarity.Similarity<? super O> similarityFunction)
        Constructor.
        Parameters:
        relation - Data relation
        similarityFunction - Similarity function
    • Method Detail

      • initialize

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

        protected static int triangleSize​(int x)
        Compute the size of a complete x by x triangle (minus diagonal).
        Parameters:
        x - Offset
        Returns:
        Size of complete triangle
      • getOffset

        private int getOffset​(int x,
                              int y)
        Array offset computation.
        Parameters:
        x - X parameter
        y - Y parameter
        Returns:
        Array offset
      • logStatistics

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

        public elki.database.query.similarity.SimilarityQuery<O> getSimilarityQuery​(elki.similarity.Similarity<? super O> similarityFunction)
        Specified by:
        getSimilarityQuery in interface elki.index.SimilarityIndex<O>
      • similarityRangeByDBID

        public elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> similarityRangeByDBID​(elki.database.query.similarity.SimilarityQuery<O> simQuery,
                                                                                                        double maxradius,
                                                                                                        int flags)
        Specified by:
        similarityRangeByDBID in interface elki.index.SimilarityRangeIndex<O>
      • similarityRangeByObject

        public elki.database.query.range.RangeSearcher<O> similarityRangeByObject​(elki.database.query.similarity.SimilarityQuery<O> simQuery,
                                                                                  double maxrange,
                                                                                  int flags)
        Specified by:
        similarityRangeByObject in interface elki.index.SimilarityRangeIndex<O>