本文整理了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
[英]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;
}
内容来源于网络,如有侵权,请联系作者删除!