summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java
diff options
context:
space:
mode:
authorAndrej Shadura <andrewsh@debian.org>2019-03-09 22:30:40 +0000
committerAndrej Shadura <andrewsh@debian.org>2019-03-09 22:30:40 +0000
commit337087b668d3a54f3afee3a9adb597a32e9f7e94 (patch)
treed860094269622472f8079d497ac7af02dbb4e038 /src/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java
parent14a486343aef55f97f54082d6b542dedebf6f3ba (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.java85
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);
}
}
}