diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java index d24fc62e..a48de183 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; 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,14 +23,13 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace; 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.data.spatial.SpatialComparable; +import de.lmu.ifi.dbs.elki.utilities.BitsUtil; /** - * Provides a distance function that computes the Euclidean distance between - * feature vectors only in specified dimensions. + * Euclidean distance function between {@link NumberVector}s only in specified + * dimensions. * * @author Elke Achtert */ @@ -40,13 +39,12 @@ public class SubspaceEuclideanDistanceFunction extends SubspaceLPNormDistanceFun * * @param dimensions Selected dimensions */ - public SubspaceEuclideanDistanceFunction(BitSet dimensions) { + public SubspaceEuclideanDistanceFunction(long[] dimensions) { super(2.0, dimensions); } /** - * Provides the Euclidean distance between two given feature vectors in the - * selected dimensions. + * Constructor. * * @param v1 first feature vector * @param v2 second feature vector @@ -54,13 +52,13 @@ public class SubspaceEuclideanDistanceFunction extends SubspaceLPNormDistanceFun * selected dimensions */ @Override - public double doubleDistance(NumberVector<?> v1, NumberVector<?> v2) { + public double distance(NumberVector v1, NumberVector v2) { if(v1.getDimensionality() != v2.getDimensionality()) { throw new IllegalArgumentException("Different dimensionality of FeatureVectors\n " + "first argument: " + v1 + "\n " + "second argument: " + v2); } double sqrDist = 0; - for(int d = dimensions.nextSetBit(0); d >= 0; d = dimensions.nextSetBit(d + 1)) { + for(int d = BitsUtil.nextSetBit(dimensions, 0); d >= 0; d = BitsUtil.nextSetBit(dimensions, d + 1)) { final double delta = v1.doubleValue(d) - v2.doubleValue(d); sqrDist += delta * delta; } @@ -68,13 +66,13 @@ public class SubspaceEuclideanDistanceFunction extends SubspaceLPNormDistanceFun } @Override - protected double doubleMinDistObject(SpatialComparable mbr, NumberVector<?> v) { + protected double minDistObject(SpatialComparable mbr, NumberVector v) { if(mbr.getDimensionality() != v.getDimensionality()) { throw new IllegalArgumentException("Different dimensionality of objects\n " + "first argument: " + mbr.toString() + "\n " + "second argument: " + v.toString()); } double sqrDist = 0; - for(int d = dimensions.nextSetBit(0); d >= 0; d = dimensions.nextSetBit(d + 1)) { + for(int d = BitsUtil.nextSetBit(dimensions, 0); d >= 0; d = BitsUtil.nextSetBit(dimensions, d + 1)) { final double delta; final double value = v.doubleValue(d); final double omin = mbr.getMin(d); @@ -96,12 +94,12 @@ public class SubspaceEuclideanDistanceFunction extends SubspaceLPNormDistanceFun } @Override - public double doubleMinDist(SpatialComparable mbr1, SpatialComparable mbr2) { + public double minDist(SpatialComparable mbr1, SpatialComparable mbr2) { if(mbr1.getDimensionality() != mbr2.getDimensionality()) { throw new IllegalArgumentException("Different dimensionality of objects\n " + "first argument: " + mbr1.toString() + "\n " + "second argument: " + mbr2.toString()); } double sqrDist = 0; - for(int d = dimensions.nextSetBit(0); d >= 0; d = dimensions.nextSetBit(d + 1)) { + for(int d = BitsUtil.nextSetBit(dimensions, 0); d >= 0; d = BitsUtil.nextSetBit(dimensions, d + 1)) { final double delta; final double max1 = mbr1.getMax(d); final double min2 = mbr2.getMin(d); @@ -124,9 +122,9 @@ public class SubspaceEuclideanDistanceFunction extends SubspaceLPNormDistanceFun } @Override - public double doubleNorm(NumberVector<?> obj) { + public double norm(NumberVector obj) { double sqrDist = 0; - for(int d = dimensions.nextSetBit(0); d >= 0; d = dimensions.nextSetBit(d + 1)) { + for(int d = BitsUtil.nextSetBit(dimensions, 0); d >= 0; d = BitsUtil.nextSetBit(dimensions, d + 1)) { final double delta = obj.doubleValue(d); sqrDist += delta * delta; } @@ -140,7 +138,7 @@ public class SubspaceEuclideanDistanceFunction extends SubspaceLPNormDistanceFun * * @apiviz.exclude */ - public static class Parameterizer extends AbstractDimensionsSelectingDoubleDistanceFunction.Parameterizer { + public static class Parameterizer extends AbstractDimensionsSelectingDistanceFunction.Parameterizer { @Override protected SubspaceEuclideanDistanceFunction makeInstance() { return new SubspaceEuclideanDistanceFunction(dimensions); |