/** * Simplified constructor. * * @param database Database */ public RelationObjectIterator(Relation<? extends O> database) { super(); this.database = database; this.iter = database.iterDBIDs(); }
/** * Get the dimensionality of a vector field. * * @param relation Relation * @return Dimensionality */ private static int dimensionality(Relation<ParameterizationFunction> relation) { return relation.get(relation.iterDBIDs()).getDimensionality(); }
@Override public void getRangeForObject(O obj, double range, ModifiableDoubleDBIDList neighbors) { final Relation<? extends O> relation = getRelation(); linearScan(relation, relation.iterDBIDs(), obj, range, neighbors); }
@Override public void getRangeForObject(O obj, double range, ModifiableDoubleDBIDList neighbors) { final Relation<? extends O> relation = getRelation(); linearScan(relation, relation.iterDBIDs(), obj, range, neighbors); }
/** * Execute a function for each ID. * * @param action Action to execute */ default void forEach(BiConsumer<? super DBIDRef, ? super O> action) { for(DBIDIter it = iterDBIDs(); it.valid(); it.advance()) { action.accept(it, get(it)); } }
@Override public void getRangeForDBID(DBIDRef id, double range, ModifiableDoubleDBIDList neighbors) { final Relation<? extends O> relation = getRelation(); linearScan(relation, relation.iterDBIDs(), relation.get(id), range, neighbors); }
@Override public void getRangeForDBID(DBIDRef id, double range, ModifiableDoubleDBIDList neighbors) { final Relation<? extends O> relation = getRelation(); linearScan(relation, relation.iterDBIDs(), relation.get(id), range, neighbors); }
@Override public DoubleDBIDList getRangeForObject(O obj, double range) { ModifiableDoubleDBIDList result = DBIDUtil.newDistanceDBIDList(); linearScan(relation, relation.iterDBIDs(), obj, range, result); result.sort(); return result; }
@Override public KNNList getKNNForObject(O obj, int k) { final Relation<? extends O> relation = getRelation(); return linearScan(relation, relation.iterDBIDs(), obj, DBIDUtil.newHeap(k)).toKNNList(); }
@Override public DoubleDBIDList getRangeForObject(O obj, double range) { final Relation<? extends O> relation = getRelation(); ModifiableDoubleDBIDList result = DBIDUtil.newDistanceDBIDList(); linearScan(relation, relation.iterDBIDs(), obj, range, result); result.sort(); return result; }
@Override public void getRangeForDBID(DBIDRef id, double range, ModifiableDoubleDBIDList neighbors) { for(DBIDIter iter = relation.iterDBIDs(); iter.valid(); iter.advance()) { final double currentSim = simQuery.similarity(id, iter); if(currentSim >= range) { neighbors.add(currentSim, iter); } } }
@Override public void initialize() { setPartitions(relation); for(DBIDIter iter = relation.iterDBIDs(); iter.valid(); iter.advance()) { DBID id = DBIDUtil.deref(iter); vectorApprox.add(calculateApproximation(id, relation.get(id))); } }
@Override public void initialize() { super.initialize(); List<MkCoPEntry> objs = new ArrayList<>(relation.size()); for(DBIDIter iter = relation.iterDBIDs(); iter.valid(); iter.advance()) { DBID id = DBIDUtil.deref(iter); // FIXME: expensive final O object = relation.get(id); objs.add(createNewLeafEntry(id, object, Double.NaN)); } insertAll(objs); }
@Override public void getRangeForDBID(DBIDRef id, double range, ModifiableDoubleDBIDList neighbors) { final DistanceQuery<O> dq = distanceQuery; for(DBIDIter iter = getRelation().iterDBIDs(); iter.valid(); iter.advance()) { final double currentDistance = dq.distance(id, iter); if(currentDistance <= range) { neighbors.add(currentDistance, iter); } } }
@Override public KNNList getKNNForDBID(DBIDRef id, int k) { final Relation<? extends O> relation = getRelation(); return linearScan(relation, relation.iterDBIDs(), relation.get(id), DBIDUtil.newHeap(k)).toKNNList(); }
@Override public DoubleDBIDList getRangeForDBID(DBIDRef id, double range) { final Relation<? extends O> relation = getRelation(); // Note: subtle optimization. Get "id" only once! final O obj = relation.get(id); ModifiableDoubleDBIDList result = DBIDUtil.newDistanceDBIDList(); linearScan(relation, relation.iterDBIDs(), obj, range, result); result.sort(); return result; }
@Override public DoubleDBIDList getRangeForDBID(DBIDRef id, double range) { final Relation<? extends O> relation = getRelation(); // Note: subtle optimization. Get "id" only once! final O obj = relation.get(id); ModifiableDoubleDBIDList result = DBIDUtil.newDistanceDBIDList(); linearScan(relation, relation.iterDBIDs(), obj, range, result); result.sort(); return result; }
@Override public KNNList getKNNForDBID(DBIDRef id, int k) { final Relation<? extends O> relation = getRelation(); return linearScan(relation , relation.iterDBIDs(), relation.get(id), DBIDUtil.newHeap(k)).toKNNListSqrt(); }
@Override public void getRangeForObject(O obj, double range, ModifiableDoubleDBIDList neighbors) { final Relation<? extends O> relation = getRelation(); final DistanceQuery<O> dq = distanceQuery; for(DBIDIter iter = relation.iterDBIDs(); iter.valid(); iter.advance()) { final double currentDistance = dq.distance(obj, iter); if(currentDistance <= range) { neighbors.add(currentDistance, iter); } } } }
@Override public void initialize() { sorted = DBIDUtil.newDistanceDBIDList(relation.size()); dims = RelationUtil.dimensionality(relation); for(DBIDIter it = relation.iterDBIDs(); it.valid(); it.advance()) { sorted.add(Double.NaN, it); } buildTree(0, sorted.size(), 0, sorted.iter()); }