diff options
author | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:32 +0000 |
---|---|---|
committer | Andrej Shadura <andrewsh@debian.org> | 2019-03-09 22:30:32 +0000 |
commit | c36aa2a8fd31ca5e225ff30278e910070cd2c8c1 (patch) | |
tree | bdfe1a5ccb57999d4d664a2a44121a78c88b19d4 /src/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java | |
parent | 89aa1958dbaf9052da0c24706308a2ef8cefa96e (diff) |
Import Upstream version 0.5.0~beta2
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java index 25abe7ef..2d681dad 100644 --- a/src/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java +++ b/src/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -24,6 +24,14 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction; */ import de.lmu.ifi.dbs.elki.data.NumberVector; +import de.lmu.ifi.dbs.elki.data.VectorUtil; +import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable; +import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation; +import de.lmu.ifi.dbs.elki.data.type.TypeUtil; +import de.lmu.ifi.dbs.elki.database.query.distance.SpatialDistanceQuery; +import de.lmu.ifi.dbs.elki.database.query.distance.SpatialPrimitiveDistanceQuery; +import de.lmu.ifi.dbs.elki.database.relation.Relation; +import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; /** @@ -34,7 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; * * @author Arthur Zimek */ -public class CosineDistanceFunction extends AbstractCosineDistanceFunction { +public class CosineDistanceFunction extends AbstractVectorDoubleDistanceFunction implements SpatialPrimitiveDoubleDistanceFunction<NumberVector<?, ?>> { /** * Static instance */ @@ -62,7 +70,7 @@ public class CosineDistanceFunction extends AbstractCosineDistanceFunction { */ @Override public double doubleDistance(NumberVector<?, ?> v1, NumberVector<?, ?> v2) { - double d = 1 - angle(v1, v2); + double d = 1 - VectorUtil.cosAngle(v1, v2); if(d < 0) { d = 0; } @@ -70,6 +78,20 @@ public class CosineDistanceFunction extends AbstractCosineDistanceFunction { } @Override + public double doubleMinDist(SpatialComparable mbr1, SpatialComparable mbr2) { + double d = 1 - VectorUtil.minCosAngle(mbr1, mbr2); + if(d < 0) { + d = 0; + } + return d; + } + + @Override + public DoubleDistance minDist(SpatialComparable mbr1, SpatialComparable mbr2) { + return new DoubleDistance(doubleMinDist(mbr1, mbr2)); + } + + @Override public String toString() { return "CosineDistance"; } @@ -85,6 +107,16 @@ public class CosineDistanceFunction extends AbstractCosineDistanceFunction { return this.getClass().equals(obj.getClass()); } + @Override + public <T extends NumberVector<?, ?>> SpatialDistanceQuery<T, DoubleDistance> instantiate(Relation<T> relation) { + return new SpatialPrimitiveDistanceQuery<T, DoubleDistance>(relation, this); + } + + @Override + public SimpleTypeInformation<? super NumberVector<?, ?>> getInputTypeRestriction() { + return TypeUtil.NUMBER_VECTOR_VARIABLE_LENGTH; + } + /** * Parameterization class. * |