summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java38
1 files changed, 14 insertions, 24 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java
index ccca76da..ab54b88f 100644
--- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java
+++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.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.
+ * Manhattan distance function between {@link NumberVector}s only in specified
+ * dimensions.
*
* @author Elke Achtert
*/
@@ -40,40 +39,31 @@ public class SubspaceManhattanDistanceFunction extends SubspaceLPNormDistanceFun
*
* @param dimensions Selected dimensions
*/
- public SubspaceManhattanDistanceFunction(BitSet dimensions) {
+ public SubspaceManhattanDistanceFunction(long[] dimensions) {
super(1.0, dimensions);
}
- /**
- * Provides the Euclidean distance between two given feature vectors in the
- * selected dimensions.
- *
- * @param v1 first feature vector
- * @param v2 second feature vector
- * @return the Euclidean distance between two given feature vectors in the
- * 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 sum = 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)) {
sum += Math.abs(v1.doubleValue(d) - v2.doubleValue(d));
}
return sum;
}
@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 sum = 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 value = v.doubleValue(d);
final double omin = mbr.getMin(d);
if(value < omin) {
@@ -93,12 +83,12 @@ public class SubspaceManhattanDistanceFunction 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 sum = 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 max1 = mbr1.getMax(d);
final double min2 = mbr2.getMin(d);
if(max1 < min2) {
@@ -119,9 +109,9 @@ public class SubspaceManhattanDistanceFunction extends SubspaceLPNormDistanceFun
}
@Override
- public double doubleNorm(NumberVector<?> obj) {
+ public double norm(NumberVector obj) {
double sum = 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)) {
sum += Math.abs(obj.doubleValue(d));
}
return sum;
@@ -134,7 +124,7 @@ public class SubspaceManhattanDistanceFunction extends SubspaceLPNormDistanceFun
*
* @apiviz.exclude
*/
- public static class Parameterizer extends AbstractDimensionsSelectingDoubleDistanceFunction.Parameterizer {
+ public static class Parameterizer extends AbstractDimensionsSelectingDistanceFunction.Parameterizer {
@Override
protected SubspaceManhattanDistanceFunction makeInstance() {
return new SubspaceManhattanDistanceFunction(dimensions);