Package elki.index.distancematrix
Class PrecomputedDistanceMatrix<O>
- java.lang.Object
-
- elki.index.distancematrix.PrecomputedDistanceMatrix<O>
-
- Type Parameters:
O- Object type
- All Implemented Interfaces:
elki.index.DistanceIndex<O>,elki.index.DistancePriorityIndex<O>,elki.index.Index,elki.index.KNNIndex<O>,elki.index.RangeIndex<O>
public class PrecomputedDistanceMatrix<O> extends java.lang.Object implements elki.index.DistanceIndex<O>, elki.index.RangeIndex<O>, elki.index.KNNIndex<O>, elki.index.DistancePriorityIndex<O>Distance matrix, for precomputing similarity 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) distance 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 classPrecomputedDistanceMatrix.Factory<O>Factory for the index.classPrecomputedDistanceMatrix.PrecomputedDistancePrioritySearcherRange query using the distance matrix.classPrecomputedDistanceMatrix.PrecomputedDistanceQueryDistance query using the precomputed matrix.classPrecomputedDistanceMatrix.PrecomputedKNNQuerykNN query using the distance matrix.classPrecomputedDistanceMatrix.PrecomputedRangeQueryRange query using the distance matrix.
-
Field Summary
Fields Modifier and Type Field Description protected elki.distance.Distance<? super O>distanceNested distance function.private elki.database.ids.DBIDRangeidsDBID range.private static elki.logging.LoggingLOGClass logger.private double[]matrixDistance matrix.protected java.lang.ref.WeakReference<elki.database.relation.Relation<O>>refrelationData relation.
-
Constructor Summary
Constructors Constructor Description PrecomputedDistanceMatrix(elki.database.relation.Relation<O> relation, elki.database.ids.DBIDRange range, elki.distance.Distance<? super O> distance)Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description elki.database.query.distance.DistanceQuery<O>getDistanceQuery(elki.distance.Distance<? super O> distanceFunction)private intgetOffset(int x, int y)Array offset computation.voidinitialize()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)voidlogStatistics()elki.database.query.PrioritySearcher<elki.database.ids.DBIDRef>priorityByDBID(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)elki.database.query.PrioritySearcher<O>priorityByObject(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef>rangeByDBID(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)elki.database.query.range.RangeSearcher<O>rangeByObject(elki.database.query.distance.DistanceQuery<O> distanceQuery, 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.
-
refrelation
protected final java.lang.ref.WeakReference<elki.database.relation.Relation<O>> refrelation
Data relation.
-
distance
protected final elki.distance.Distance<? super O> distance
Nested distance function.
-
matrix
private double[] matrix
Distance matrix.
-
ids
private elki.database.ids.DBIDRange ids
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
-
getDistanceQuery
public elki.database.query.distance.DistanceQuery<O> getDistanceQuery(elki.distance.Distance<? super O> distanceFunction)
- Specified by:
getDistanceQueryin interfaceelki.index.DistanceIndex<O>
-
kNNByObject
public elki.database.query.knn.KNNSearcher<O> kNNByObject(elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)
-
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:
kNNByDBIDin interfaceelki.index.KNNIndex<O>
-
rangeByObject
public elki.database.query.range.RangeSearcher<O> rangeByObject(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)
-
rangeByDBID
public elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> rangeByDBID(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)
- Specified by:
rangeByDBIDin interfaceelki.index.RangeIndex<O>
-
priorityByObject
public elki.database.query.PrioritySearcher<O> priorityByObject(elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)
- Specified by:
priorityByObjectin interfaceelki.index.DistancePriorityIndex<O>
-
-