diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java index a0a1e011..5622daf3 100644 --- a/src/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java +++ b/src/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra; 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 @@ -23,13 +23,12 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.util.BitSet; - import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.database.ids.DBIDs; 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.BitsUtil; /** * Centroid only using a subset of dimensions. @@ -46,7 +45,7 @@ public class ProjectedCentroid extends Centroid { /** * The selected dimensions. */ - private BitSet dims; + private long[] dims; /** * Constructor for updating use. @@ -54,10 +53,9 @@ public class ProjectedCentroid extends Centroid { * @param dims Dimensions to use (indexed with 0) * @param dim Full dimensionality */ - public ProjectedCentroid(BitSet dims, int dim) { + public ProjectedCentroid(long[] dims, int dim) { super(dim); this.dims = dims; - assert (dims.length() <= dim) : (dims.length() + " > " + dim + " ?!?"); } /** @@ -69,7 +67,7 @@ public class ProjectedCentroid extends Centroid { public void put(double[] val) { assert (val.length == elements.length); wsum += 1.0; - for(int i = dims.nextSetBit(0); i >= 0; i = dims.nextSetBit(i + 1)) { + for(int i = BitsUtil.nextSetBit(dims, 0); i >= 0; i = BitsUtil.nextSetBit(dims, i + 1)) { final double delta = val[i] - elements[i]; elements[i] += delta / wsum; } @@ -84,11 +82,11 @@ public class ProjectedCentroid extends Centroid { @Override public void put(double[] val, double weight) { assert (val.length == elements.length); - if (weight == 0) { + if(weight == 0) { return; // Skip zero weights. } final double nwsum = weight + wsum; - for(int i = dims.nextSetBit(0); i >= 0; i = dims.nextSetBit(i + 1)) { + for(int i = BitsUtil.nextSetBit(dims, 0); i >= 0; i = BitsUtil.nextSetBit(dims, i + 1)) { final double delta = val[i] - elements[i]; final double rval = delta * weight / nwsum; elements[i] += rval; @@ -102,10 +100,10 @@ public class ProjectedCentroid extends Centroid { * @param val Value */ @Override - public void put(NumberVector<?> val) { + public void put(NumberVector val) { assert (val.getDimensionality() == elements.length); wsum += 1.0; - for(int i = dims.nextSetBit(0); i >= 0; i = dims.nextSetBit(i + 1)) { + for(int i = BitsUtil.nextSetBit(dims, 0); i >= 0; i = BitsUtil.nextSetBit(dims, i + 1)) { final double delta = val.doubleValue(i) - elements[i]; elements[i] += delta / wsum; } @@ -118,13 +116,13 @@ public class ProjectedCentroid extends Centroid { * @param weight weight */ @Override - public void put(NumberVector<?> val, double weight) { + public void put(NumberVector val, double weight) { assert (val.getDimensionality() == elements.length); - if (weight == 0) { + if(weight == 0) { return; // Skip zero weights. } final double nwsum = weight + wsum; - for(int i = dims.nextSetBit(0); i >= 0; i = dims.nextSetBit(i + 1)) { + for(int i = BitsUtil.nextSetBit(dims, 0); i >= 0; i = BitsUtil.nextSetBit(dims, i + 1)) { final double delta = val.doubleValue(i) - elements[i]; final double rval = delta * weight / nwsum; elements[i] += rval; @@ -139,9 +137,8 @@ public class ProjectedCentroid extends Centroid { * @param relation Relation to process * @return Centroid */ - public static ProjectedCentroid make(BitSet dims, Relation<? extends NumberVector<?>> relation) { + public static ProjectedCentroid make(long[] dims, Relation<? extends NumberVector> relation) { ProjectedCentroid c = new ProjectedCentroid(dims, RelationUtil.dimensionality(relation)); - assert (dims.size() <= RelationUtil.dimensionality(relation)); for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) { c.put(relation.get(iditer)); } @@ -156,9 +153,8 @@ public class ProjectedCentroid extends Centroid { * @param ids IDs to process * @return Centroid */ - public static ProjectedCentroid make(BitSet dims, Relation<? extends NumberVector<?>> relation, DBIDs ids) { + public static ProjectedCentroid make(long[] dims, Relation<? extends NumberVector> relation, DBIDs ids) { ProjectedCentroid c = new ProjectedCentroid(dims, RelationUtil.dimensionality(relation)); - assert (dims.length() <= RelationUtil.dimensionality(relation)); for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { c.put(relation.get(iter)); } |