Package elki.index.distancematrix
Class PrecomputedSimilarityMatrix<O>
- java.lang.Object
-
- elki.index.distancematrix.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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPrecomputedSimilarityMatrix.Factory<O>Factory for the index.private classPrecomputedSimilarityMatrix.PrecomputedSimilarityQuerySimilarity query using the precomputed matrix.private classPrecomputedSimilarityMatrix.PrecomputedSimilarityRangeQueryRange query using the distance matrix.
-
Field Summary
Fields Modifier and Type Field Description private elki.database.ids.DBIDRangeidsDBID range.private static elki.logging.LoggingLOGClass logger.private double[]matrixSimilarity matrix.protected elki.database.relation.Relation<O>relationThe representation we are bound to.protected elki.similarity.Similarity<? super O>similarityFunctionNested similarity function.protected elki.database.query.similarity.SimilarityQuery<O>similarityQueryNested similarity query.private intsizeSize 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 intgetOffset(int x, int y)Array offset computation.elki.database.query.similarity.SimilarityQuery<O>getSimilarityQuery(elki.similarity.Similarity<? super O> similarityFunction)voidinitialize()voidlogStatistics()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 inttriangleSize(int x)Compute the size of a complete x by x triangle (minus diagonal).
-
-
-
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.
-
-
Method Detail
-
initialize
public void initialize()
- Specified by:
initializein interfaceelki.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 parametery- Y parameter- Returns:
- Array offset
-
logStatistics
public void logStatistics()
- Specified by:
logStatisticsin interfaceelki.index.Index
-
getSimilarityQuery
public elki.database.query.similarity.SimilarityQuery<O> getSimilarityQuery(elki.similarity.Similarity<? super O> similarityFunction)
- Specified by:
getSimilarityQueryin interfaceelki.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:
similarityRangeByDBIDin interfaceelki.index.SimilarityRangeIndex<O>
-
-