de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery.getKNNForBulkDBIDs()方法的使用及代码示例

x33g5p2x  于2022-01-23 转载在 其他  
字(13.6k)|赞(0)|评价(0)|浏览(89)

本文整理了Java中de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery.getKNNForBulkDBIDs()方法的一些代码示例,展示了KNNQuery.getKNNForBulkDBIDs()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。KNNQuery.getKNNForBulkDBIDs()方法的具体详情如下:
包路径:de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery
类名称:KNNQuery
方法名:getKNNForBulkDBIDs

KNNQuery.getKNNForBulkDBIDs介绍

[英]Bulk query method
[中]批量查询方法

代码示例

代码示例来源:origin: elki-project/elki

/**
 * Performs a bulk load on this RTree with the specified data. Is called by
 * the constructor and should be overwritten by subclasses if necessary.
 */
@Override
protected void bulkLoad(List<RdKNNEntry> entries) {
 super.bulkLoad(entries);
 // adjust all knn distances
 ArrayModifiableDBIDs ids = DBIDUtil.newArray(entries.size());
 for(RdKNNEntry entry : entries) {
  DBID id = ((RdKNNLeafEntry) entry).getDBID();
  ids.add(id);
 }
 ids.sort();
 List<? extends KNNList> knnLists = knnQuery.getKNNForBulkDBIDs(ids, settings.k_max);
 adjustKNNDistance(getRootEntry(), ids, knnLists);
 // test
 doExtraIntegrityChecks();
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki-index-rtree

/**
 * Performs a bulk load on this RTree with the specified data. Is called by
 * the constructor and should be overwritten by subclasses if necessary.
 */
@Override
protected void bulkLoad(List<RdKNNEntry> entries) {
 super.bulkLoad(entries);
 // adjust all knn distances
 ArrayModifiableDBIDs ids = DBIDUtil.newArray(entries.size());
 for(RdKNNEntry entry : entries) {
  DBID id = ((RdKNNLeafEntry) entry).getDBID();
  ids.add(id);
 }
 ids.sort();
 List<? extends KNNList> knnLists = knnQuery.getKNNForBulkDBIDs(ids, settings.k_max);
 adjustKNNDistance(getRootEntry(), ids, knnLists);
 // test
 doExtraIntegrityChecks();
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki

/**
 * Performs a bulk load on this RTree with the specified data. Is called by
 * the constructor and should be overwritten by subclasses if necessary.
 */
@Override
protected void bulkLoad(List<RdKNNEntry> entries) {
 super.bulkLoad(entries);
 // adjust all knn distances
 ArrayModifiableDBIDs ids = DBIDUtil.newArray(entries.size());
 for(RdKNNEntry entry : entries) {
  DBID id = ((RdKNNLeafEntry) entry).getDBID();
  ids.add(id);
 }
 ids.sort();
 List<? extends KNNList> knnLists = knnQuery.getKNNForBulkDBIDs(ids, settings.k_max);
 adjustKNNDistance(getRootEntry(), ids, knnLists);
 // test
 doExtraIntegrityChecks();
}

代码示例来源:origin: elki-project/elki

@Override
public DoubleDBIDList getRKNNForObject(O obj, int k) {
 ModifiableDoubleDBIDList rNNlist = DBIDUtil.newDistanceDBIDList();
 ArrayDBIDs allIDs = DBIDUtil.ensureArray(relation.getDBIDs());
 List<? extends KNNList> kNNLists = knnQuery.getKNNForBulkDBIDs(allIDs, k);
 for(DBIDArrayIter iter = allIDs.iter(); iter.valid(); iter.advance()) {
  KNNList knn = kNNLists.get(iter.getOffset());
  final double dist = distanceQuery.distance(obj, iter);
  final int last = Math.min(k - 1, knn.size() - 1);
  if(last < k - 1 || dist <= knn.doubleValue(last)) {
   rNNlist.add(dist, iter);
  }
 }
 rNNlist.sort();
 return rNNlist;
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki-database

@Override
public DoubleDBIDList getRKNNForObject(O obj, int k) {
 ModifiableDoubleDBIDList rNNlist = DBIDUtil.newDistanceDBIDList();
 ArrayDBIDs allIDs = DBIDUtil.ensureArray(relation.getDBIDs());
 List<? extends KNNList> kNNLists = knnQuery.getKNNForBulkDBIDs(allIDs, k);
 for(DBIDArrayIter iter = allIDs.iter(); iter.valid(); iter.advance()) {
  KNNList knn = kNNLists.get(iter.getOffset());
  final double dist = distanceQuery.distance(obj, iter);
  final int last = Math.min(k - 1, knn.size() - 1);
  if(last < k - 1 || dist <= knn.doubleValue(last)) {
   rNNlist.add(dist, iter);
  }
 }
 rNNlist.sort();
 return rNNlist;
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki

@Override
public DoubleDBIDList getRKNNForObject(O obj, int k) {
 ModifiableDoubleDBIDList rNNlist = DBIDUtil.newDistanceDBIDList();
 ArrayDBIDs allIDs = DBIDUtil.ensureArray(relation.getDBIDs());
 List<? extends KNNList> kNNLists = knnQuery.getKNNForBulkDBIDs(allIDs, k);
 int i = 0;
 for(DBIDIter iter = allIDs.iter(); iter.valid(); iter.advance()) {
  KNNList knn = kNNLists.get(i);
  int last = Math.min(k - 1, knn.size() - 1);
  double dist = distanceQuery.distance(obj, iter);
  if(last < k - 1 || dist <= knn.get(last).doubleValue()) {
   rNNlist.add(dist, iter);
  }
  i++;
 }
 rNNlist.sort();
 return rNNlist;
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki-index-rtree

/**
 * Performs necessary operations after deleting the specified object.
 */
@Override
protected void postDelete(RdKNNEntry entry) {
 // reverse knn of o
 ModifiableDoubleDBIDList rnns = DBIDUtil.newDistanceDBIDList();
 doReverseKNN(getRoot(), ((RdKNNLeafEntry) entry).getDBID(), rnns);
 // knn of rnn
 ArrayModifiableDBIDs ids = DBIDUtil.newArray(rnns);
 ids.sort();
 List<? extends KNNList> knnLists = knnQuery.getKNNForBulkDBIDs(ids, settings.k_max);
 // adjust knn distances
 adjustKNNDistance(getRootEntry(), ids, knnLists);
}

代码示例来源:origin: elki-project/elki

/**
 * Performs necessary operations after deleting the specified object.
 */
@Override
protected void postDelete(RdKNNEntry entry) {
 // reverse knn of o
 ModifiableDoubleDBIDList rnns = DBIDUtil.newDistanceDBIDList();
 doReverseKNN(getRoot(), ((RdKNNLeafEntry) entry).getDBID(), rnns);
 // knn of rnn
 ArrayModifiableDBIDs ids = DBIDUtil.newArray(rnns);
 ids.sort();
 List<? extends KNNList> knnLists = knnQuery.getKNNForBulkDBIDs(ids, settings.k_max);
 // adjust knn distances
 adjustKNNDistance(getRootEntry(), ids, knnLists);
}

代码示例来源:origin: elki-project/elki

List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(allIDs, k);

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki

/**
 * Performs necessary operations after deleting the specified object.
 */
@Override
protected void postDelete(RdKNNEntry entry) {
 // reverse knn of o
 ModifiableDoubleDBIDList rnns = DBIDUtil.newDistanceDBIDList();
 doReverseKNN(getRoot(), ((RdKNNLeafEntry) entry).getDBID(), rnns);
 // knn of rnn
 ArrayModifiableDBIDs ids = DBIDUtil.newArray(rnns);
 ids.sort();
 List<? extends KNNList> knnLists = knnQuery.getKNNForBulkDBIDs(ids, settings.k_max);
 // adjust knn distances
 adjustKNNDistance(getRootEntry(), ids, knnLists);
}

代码示例来源:origin: elki-project/elki

/**
 * Materializes the kNNs and RkNNs of the specified object IDs.
 *
 * @param ids the IDs of the objects
 */
private void materializeKNNAndRKNNs(ArrayDBIDs ids, FiniteProgress progress) {
 // add an empty list to each rknn
 for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
  if(materialized_RkNN.get(iter) == null) {
   materialized_RkNN.put(iter, new TreeSet<DoubleDBIDPair>());
  }
 }
 // knn query
 List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(ids, k);
 for(DBIDArrayIter id = ids.iter(); id.valid(); id.advance()) {
  KNNList kNNs = kNNList.get(id.getOffset());
  storage.put(id, kNNs);
  for(DoubleDBIDListIter iter = kNNs.iter(); iter.valid(); iter.advance()) {
   materialized_RkNN.get(iter).add(DBIDUtil.newPair(iter.doubleValue(), id));
  }
  LOG.incrementProcessed(progress);
 }
 LOG.ensureCompleted(progress);
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki-index-preprocessed

/**
 * Materializes the kNNs and RkNNs of the specified object IDs.
 *
 * @param ids the IDs of the objects
 */
private void materializeKNNAndRKNNs(ArrayDBIDs ids, FiniteProgress progress) {
 // add an empty list to each rknn
 for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
  if(materialized_RkNN.get(iter) == null) {
   materialized_RkNN.put(iter, new TreeSet<DoubleDBIDPair>());
  }
 }
 // knn query
 List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(ids, k);
 for(DBIDArrayIter id = ids.iter(); id.valid(); id.advance()) {
  KNNList kNNs = kNNList.get(id.getOffset());
  storage.put(id, kNNs);
  for(DoubleDBIDListIter iter = kNNs.iter(); iter.valid(); iter.advance()) {
   materialized_RkNN.get(iter).add(DBIDUtil.newPair(iter.doubleValue(), id));
  }
  LOG.incrementProcessed(progress);
 }
 LOG.ensureCompleted(progress);
}

代码示例来源:origin: elki-project/elki

@Override
public DoubleDBIDList getRKNNForDBID(DBIDRef id, int k) {
 ModifiableDoubleDBIDList rNNList = DBIDUtil.newDistanceDBIDList();
 ArrayDBIDs allIDs = DBIDUtil.ensureArray(relation.getDBIDs());
 List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(allIDs, k);
 int i = 0;
 for(DBIDIter iter = allIDs.iter(); iter.valid(); iter.advance()) {
  KNNList knn = kNNList.get(i);
  for(DoubleDBIDListIter n = knn.iter(); n.valid(); n.advance()) {
   if(DBIDUtil.equal(n, id)) {
    rNNList.add(n.doubleValue(), iter);
   }
  }
  i++;
 }
 rNNList.sort();
 return rNNList;
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki

/**
 * Materializes the kNNs and RkNNs of the specified object IDs.
 *
 * @param ids the IDs of the objects
 */
private void materializeKNNAndRKNNs(ArrayDBIDs ids, FiniteProgress progress) {
 // add an empty list to each rknn
 for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
  if(materialized_RkNN.get(iter) == null) {
   materialized_RkNN.put(iter, new TreeSet<DoubleDBIDPair>());
  }
 }
 // knn query
 List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(ids, k);
 int i = 0;
 for(DBIDIter id = ids.iter(); id.valid(); id.advance(), i++) {
  KNNList kNNs = kNNList.get(i);
  storage.put(id, kNNs);
  for(DoubleDBIDListIter iter = kNNs.iter(); iter.valid(); iter.advance()) {
   TreeSet<DoubleDBIDPair> rknns = materialized_RkNN.get(iter);
   rknns.add(makePair(iter, id));
  }
  getLogger().incrementProcessed(progress);
 }
 getLogger().ensureCompleted(progress);
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki-database

@Override
public DoubleDBIDList getRKNNForDBID(DBIDRef id, int k) {
 ModifiableDoubleDBIDList rNNList = DBIDUtil.newDistanceDBIDList();
 ArrayDBIDs allIDs = DBIDUtil.ensureArray(relation.getDBIDs());
 List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(allIDs, k);
 int i = 0;
 for(DBIDIter iter = allIDs.iter(); iter.valid(); iter.advance()) {
  KNNList knn = kNNList.get(i);
  for(DoubleDBIDListIter n = knn.iter(); n.valid(); n.advance()) {
   if(DBIDUtil.equal(n, id)) {
    rNNList.add(n.doubleValue(), iter);
   }
  }
  i++;
 }
 rNNList.sort();
 return rNNList;
}

代码示例来源:origin: de.lmu.ifi.dbs.elki/elki

@Override
public DoubleDBIDList getRKNNForDBID(DBIDRef id, int k) {
 ModifiableDoubleDBIDList rNNList = DBIDUtil.newDistanceDBIDList();
 ArrayDBIDs allIDs = DBIDUtil.ensureArray(relation.getDBIDs());
 List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(allIDs, k);
 int i = 0;
 for(DBIDIter iter = allIDs.iter(); iter.valid(); iter.advance()) {
  KNNList knn = kNNList.get(i);
  for(DoubleDBIDListIter n = knn.iter(); n.valid(); n.advance()) {
   if(DBIDUtil.equal(n, id)) {
    rNNList.add(n.doubleValue(), iter);
   }
  }
  i++;
 }
 rNNList.sort();
 return rNNList;
}

代码示例来源:origin: elki-project/elki

public static void testKNNQueries(Relation<DoubleVector> rep, KNNQuery<DoubleVector> lin_knn_query, KNNQuery<DoubleVector> preproc_knn_query, int k) {
  ArrayDBIDs sample = DBIDUtil.ensureArray(rep.getDBIDs());
  List<? extends KNNList> lin_knn_ids = lin_knn_query.getKNNForBulkDBIDs(sample, k);
  List<? extends KNNList> preproc_knn_ids = preproc_knn_query.getKNNForBulkDBIDs(sample, k);
  for(int i = 0; i < rep.size(); i++) {
   KNNList lin_knn = lin_knn_ids.get(i);
   KNNList pre_knn = preproc_knn_ids.get(i);
   DoubleDBIDListIter lin = lin_knn.iter(), pre = pre_knn.iter();
   for(; lin.valid() && pre.valid(); lin.advance(), pre.advance(), i++) {
    if(DBIDUtil.equal(lin, pre) || lin.doubleValue() == pre.doubleValue()) {
     continue;
    }
    fail(new StringBuilder(1000).append("Neighbor distances do not agree: ") //
      .append(lin_knn.toString()).append(" got: ").append(pre_knn.toString()).toString());
   }
   assertEquals("kNN sizes do not agree.", lin_knn.size(), pre_knn.size());
   for(int j = 0; j < lin_knn.size(); j++) {
    assertTrue("kNNs of linear scan and preprocessor do not match!", DBIDUtil.equal(lin.seek(j), pre.seek(j)));
    assertEquals("kNNs of linear scan and preprocessor do not match!", lin.seek(j).doubleValue(), pre.seek(j).doubleValue(), 0.);
   }
  }
 }
}

代码示例来源:origin: elki-project/elki

/**
 * Called after new objects have been inserted, updates the materialized
 * neighborhood.
 *
 * @param ids the ids of the newly inserted objects
 */
protected void objectsInserted(DBIDs ids) {
 final Logging log = getLogger(); // Could be subclass
 StepProgress stepprog = log.isVerbose() ? new StepProgress(3) : null;
 ArrayDBIDs aids = DBIDUtil.ensureArray(ids);
 // materialize the new kNNs
 log.beginStep(stepprog, 1, "New insertions ocurred, materialize their new kNNs.");
 // Bulk-query kNNs
 List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(aids, k);
 // Store in storage
 DBIDIter iter = aids.iter();
 for(int i = 0; i < aids.size(); i++, iter.advance()) {
  storage.put(iter, kNNList.get(i));
 }
 // update the affected kNNs
 log.beginStep(stepprog, 2, "New insertions ocurred, update the affected kNNs.");
 ArrayDBIDs rkNN_ids = updateKNNsAfterInsertion(ids);
 // inform listener
 log.beginStep(stepprog, 3, "New insertions ocurred, inform listeners.");
 fireKNNsInserted(ids, rkNN_ids);
 log.setCompleted(stepprog);
}

代码示例来源:origin: elki-project/elki

public DoubleDBIDList reverseKNNQuery(DBID oid, int k, SpatialPrimitiveDistanceFunction<? super O> distanceFunction, KNNQuery<O> knnQuery) {
 checkDistanceFunction(distanceFunction);
 if(k > settings.k_max) {
  throw new IllegalArgumentException("Parameter k is not supported, k > k_max: " + k + " > " + settings.k_max);
 }
 // get candidates
 ModifiableDoubleDBIDList candidates = DBIDUtil.newDistanceDBIDList();
 doReverseKNN(getRoot(), oid, candidates);
 if(k == settings.k_max) {
  candidates.sort();
  return candidates;
 }
 // refinement of candidates, if k < k_max
 ArrayModifiableDBIDs candidateIDs = DBIDUtil.newArray(candidates);
 candidateIDs.sort();
 List<? extends KNNList> knnLists = knnQuery.getKNNForBulkDBIDs(candidateIDs, k);
 ModifiableDoubleDBIDList result = DBIDUtil.newDistanceDBIDList();
 int i = 0;
 for(DBIDIter iter = candidateIDs.iter(); iter.valid(); iter.advance(), i++) {
  for(DoubleDBIDListIter qr = knnLists.get(i).iter(); qr.valid(); qr.advance()) {
   if(DBIDUtil.equal(oid, qr)) {
    result.add(qr.doubleValue(), iter);
    break;
   }
  }
 }
 result.sort();
 return result;
}

代码示例来源:origin: elki-project/elki

/**
 * Updates the kNNs of the RkNNs of the specified ids.
 *
 * @param ids the ids of deleted objects causing a change of materialized kNNs
 * @return the RkNNs of the specified ids, i.e. the kNNs which have been
 *         updated
 */
private ArrayDBIDs updateKNNsAfterDeletion(DBIDs ids) {
 SetDBIDs idsSet = DBIDUtil.ensureSet(ids);
 ArrayModifiableDBIDs rkNN_ids = DBIDUtil.newArray();
 for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
  KNNList kNNs = storage.get(iditer);
  for(DBIDIter it = kNNs.iter(); it.valid(); it.advance()) {
   if(idsSet.contains(it)) {
    rkNN_ids.add(iditer);
    break;
   }
  }
 }
 // update the kNNs of the RkNNs
 List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(rkNN_ids, k);
 DBIDIter iter = rkNN_ids.iter();
 for(int i = 0; i < rkNN_ids.size(); i++, iter.advance()) {
  storage.put(iter, kNNList.get(i));
 }
 return rkNN_ids;
}

相关文章

微信公众号

最新文章

更多