/** * Execute a function for each ID. * * @param action Action to execute */ default void forEach(Consumer<? super DBIDRef> action) { for(DBIDIter it = iter(); it.valid(); it.advance()) { action.accept(it); } } }
@Override public void prepare(OutlierResult or) { double max = Double.MIN_VALUE; DoubleRelation scores = or.getScores(); for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) { double val = scores.doubleValue(id), inv = Math.abs(1.0 / val); if(!Double.isInfinite(inv) && !Double.isNaN(inv)) { max = Math.max(max, inv); } } scaleval = max; }
@Override public List<? extends KNNList> getKNNForBulkDBIDs(ArrayDBIDs ids, int k) { // throw new // UnsupportedOperationException(ExceptionMessages.UNSUPPORTED_NOT_YET); // TODO: optimize List<KNNList> ret = new ArrayList<>(ids.size()); for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { ret.add(getKNNForDBID(iter, k)); } return ret; }
@Override public void deleteAll(DBIDs ids) { for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { delete(iter); } }
@Override public void insertAll(DBIDs ids) { List<MTreeEntry> objs = new ArrayList<>(ids.size()); for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { DBID id = DBIDUtil.deref(iter); final O object = relation.get(id); objs.add(createNewLeafEntry(id, object, Double.NaN)); } insertAll(objs); }
@Override public boolean addDBIDs(DBIDs ids) { // TODO: re-add: store.ensureCapacity(ids.size()); boolean success = false; for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { success |= store.add(DBIDUtil.asInteger(iter)); } return success; }
@Override public void deleteAll(DBIDs ids) { for (DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { delete(DBIDUtil.deref(iter)); } }
@Override public void deleteAll(DBIDs ids) { for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { delete(DBIDUtil.deref(iter)); } }
@Override public double[][] chooseInitialMeans(Database database, Relation<? extends NumberVector> relation, int k, NumberVectorDistanceFunction<?> distanceFunction) { DBIDIter iter = relation.iterDBIDs(); double[][] means = new double[k][]; for(int i = 0; i < k && iter.valid(); i++, iter.advance()) { means[i] = relation.get(iter).toArray(); } return means; }
@Override public DBIDs chooseInitialMedoids(int k, DBIDs ids, DistanceQuery<? super O> distanceFunction) { DBIDIter iter = ids.iter(); ArrayModifiableDBIDs means = DBIDUtil.newArray(k); for(int i = 0; i < k && iter.valid(); i++, iter.advance()) { means.add(iter); } return means; }
@Override public void deleteAll(DBIDs ids) { for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { delete(DBIDUtil.deref(iter)); } }
@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<MkAppEntry> objs = new ArrayList<>(relation.size()); for(DBIDIter iter = relation.iterDBIDs(); iter.valid(); iter.advance()) { DBID id = DBIDUtil.deref(iter); 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 boolean addDBIDs(DBIDs ids) { ensureSize(size + ids.size()); for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { store[size] = iter.internalGetIndex(); ++size; } return true; }
@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); } } } }
/** * Update the bounds for k-means. * * @param move Movement of centers */ protected void updateBounds(double[] move) { for(DBIDIter it = relation.iterDBIDs(); it.valid(); it.advance()) { upper.increment(it, move[assignment.intValue(it)]); VMath.minusEquals(lower.get(it), move); } }
@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()); }
@Override public PreDeConModel getNeighbors(DBIDRef reference) { final PreDeConModel asymmetric = storage.get(reference); // Check for mutual preference reachability: HashSetModifiableDBIDs ids = DBIDUtil.newHashSet(asymmetric.ids.size()); for(DBIDIter neighbor = asymmetric.ids.iter(); neighbor.valid(); neighbor.advance()) { if(storage.get(neighbor).ids.contains(reference)) { ids.add(neighbor); } } return new PreDeConModel(asymmetric.pdim, ids); }