List<Class<?>> filters = Arrays.asList(new Class<?>[] { FixedDBIDsFilter.class });
inputparams.addParameter(FileBasedDatabaseConnection.FILTERS_ID, filters);
inputparams.addParameter(FixedDBIDsFilter.IDSTART_ID, 1);
// get database
Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, inputparams);
inputparams.failOnErrors();
db.initialize();
Relation<NumberVector<?, ?>> relation = db.getRelation(TypeUtil.NUMBER_VECTOR_FIELD);
// verify data set size.
org.junit.Assert.assertEquals("Database size does not match.", shoulds, relation.size());
// Euclidean
{
DistanceQuery<NumberVector<?, ?>, DoubleDistance> dq = db.getDistanceQuery(relation, EuclideanDistanceFunction.STATIC);
KNNQuery<NumberVector<?, ?>, DoubleDistance> knnq = QueryUtil.getLinearScanKNNQuery(dq);
MeanVariance meansize = new MeanVariance();
for(DBID id : relation.iterDBIDs()) {
KNNResult<DoubleDistance> knnlist = knnq.getKNNForDBID(id, 2);
meansize.put(knnlist.size());
}
org.junit.Assert.assertEquals("Euclidean mean 2NN", mean2nnEuclid, meansize.getMean(), 0.00001);
org.junit.Assert.assertEquals("Euclidean variance 2NN", var2nnEuclid, meansize.getSampleVariance(), 0.00001);
}
// Manhattan
{
DistanceQuery<NumberVector<?, ?>, DoubleDistance> dq = db.getDistanceQuery(relation, ManhattanDistanceFunction.STATIC);
KNNQuery<NumberVector<?, ?>, DoubleDistance> knnq = QueryUtil.getLinearScanKNNQuery(dq);
MeanVariance meansize = new MeanVariance();
for(DBID id : relation.iterDBIDs()) {
KNNResult<DoubleDistance> knnlist = knnq.getKNNForDBID(id, 2);