summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java
diff options
context:
space:
mode:
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.java32
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);