diff options
author | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:40 +0000 |
---|---|---|
committer | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:40 +0000 |
commit | 337087b668d3a54f3afee3a9adb597a32e9f7e94 (patch) | |
tree | d860094269622472f8079d497ac7af02dbb4e038 /src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java | |
parent | 14a486343aef55f97f54082d6b542dedebf6f3ba (diff) |
Import Upstream version 0.6.5~20141030
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java | 85 |
1 files changed, 38 insertions, 47 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java b/src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java index 74cdf92b..b8de4338 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.referencepoints; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -30,7 +30,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.database.relation.RelationUtil; -import de.lmu.ifi.dbs.elki.utilities.DatabaseUtil; +import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints; @@ -42,34 +42,15 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; * Star-based strategy to pick reference points. * * @author Erich Schubert - * - * @param <V> Object type */ -public class StarBasedReferencePoints<V extends NumberVector<?>> implements ReferencePointsHeuristic<V> { - /** - * Parameter to specify the grid resolution. - * <p> - * Key: {@code -star.nocenter} - * </p> - */ - public static final OptionID NOCENTER_ID = new OptionID("star.nocenter", "Do not use the center as extra reference point."); - +public class StarBasedReferencePoints implements ReferencePointsHeuristic { /** - * Parameter to specify the extra scaling of the space, to allow - * out-of-data-space reference points. - * <p> - * Key: {@code -star.scale} - * </p> - */ - public static final OptionID SCALE_ID = new OptionID("star.scale", "Scale the reference points by the given factor. This can be used to obtain reference points outside the used data space."); - - /** - * Holds the value of {@link #NOCENTER_ID}. + * Exclude the center vector. */ protected boolean nocenter; /** - * Holds the value of {@link #SCALE_ID}. + * Scaling factor. */ protected double scale; @@ -86,10 +67,7 @@ public class StarBasedReferencePoints<V extends NumberVector<?>> implements Refe } @Override - public <T extends V> Collection<V> getReferencePoints(Relation<T> db) { - Relation<V> database = DatabaseUtil.relationUglyVectorCast(db); - NumberVector.Factory<V, ?> factory = RelationUtil.getNumberVectorFactory(database); - + public Collection<? extends NumberVector> getReferencePoints(Relation<? extends NumberVector> db) { int dim = RelationUtil.dimensionality(db); // Compute minimum, maximum and centroid @@ -101,10 +79,10 @@ public class StarBasedReferencePoints<V extends NumberVector<?>> implements Refe min[d] = Double.MAX_VALUE; max[d] = -Double.MAX_VALUE; } - for(DBIDIter iditer = database.iterDBIDs(); iditer.valid(); iditer.advance()) { - V obj = database.get(iditer); + for(DBIDIter iditer = db.iterDBIDs(); iditer.valid(); iditer.advance()) { + NumberVector obj = db.get(iditer); for(int d = 0; d < dim; d++) { - double val = obj.doubleValue(d + 1); + double val = obj.doubleValue(d); centroid[d] += val; min[d] = Math.min(min[d], val); max[d] = Math.max(max[d], val); @@ -112,27 +90,23 @@ public class StarBasedReferencePoints<V extends NumberVector<?>> implements Refe } // finish centroid, scale min, max for(int d = 0; d < dim; d++) { - centroid[d] = centroid[d] / database.size(); + centroid[d] = centroid[d] / db.size(); min[d] = (min[d] - centroid[d]) * scale + centroid[d]; max[d] = (max[d] - centroid[d]) * scale + centroid[d]; } - ArrayList<V> result = new ArrayList<>(2 * dim + 1); + ArrayList<Vector> result = new ArrayList<>(2 * dim + 1); if(!nocenter) { - result.add(factory.newNumberVector(centroid)); + result.add(new Vector(centroid)); } // Plus axis end points through centroid - double[] vec = new double[dim]; for(int i = 0; i < dim; i++) { - for(int d = 0; d < dim; d++) { - if(d != i) { - vec[d] = centroid[d]; - } - } + double[] vec = centroid.clone(); vec[i] = min[i]; - result.add(factory.newNumberVector(vec)); + result.add(new Vector(vec)); + vec = centroid.clone(); vec[i] = max[i]; - result.add(factory.newNumberVector(vec)); + result.add(new Vector(vec)); } return result; @@ -145,7 +119,24 @@ public class StarBasedReferencePoints<V extends NumberVector<?>> implements Refe * * @apiviz.exclude */ - public static class Parameterizer<V extends NumberVector<?>> extends AbstractParameterizer { + public static class Parameterizer extends AbstractParameterizer { + /** + * Parameter to specify the grid resolution. + * <p> + * Key: {@code -star.nocenter} + * </p> + */ + public static final OptionID NOCENTER_ID = new OptionID("star.nocenter", "Do not use the center as extra reference point."); + + /** + * Parameter to specify the extra scaling of the space, to allow + * out-of-data-space reference points. + * <p> + * Key: {@code -star.scale} + * </p> + */ + public static final OptionID SCALE_ID = new OptionID("star.scale", "Scale the reference points by the given factor. This can be used to obtain reference points outside the used data space."); + /** * Holds the value of {@link #NOCENTER_ID}. */ @@ -164,16 +155,16 @@ public class StarBasedReferencePoints<V extends NumberVector<?>> implements Refe nocenter = nocenterF.getValue(); } - DoubleParameter scaleP = new DoubleParameter(SCALE_ID, 1.0); - scaleP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); + DoubleParameter scaleP = new DoubleParameter(SCALE_ID, 1.0) // + .addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE); if(config.grab(scaleP)) { scale = scaleP.getValue(); } } @Override - protected StarBasedReferencePoints<V> makeInstance() { - return new StarBasedReferencePoints<>(nocenter, scale); + protected StarBasedReferencePoints makeInstance() { + return new StarBasedReferencePoints(nocenter, scale); } } } |