[mlpack-git] master: Add sameSet parameter. This properly handles when the query and reference set are the same (i.e. when Search() is called without a query set). (eabdec3)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Wed Apr 22 16:32:37 EDT 2015


Repository : https://github.com/mlpack/mlpack

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/8f85309ae9be40e819b301b39c9a940aa28f3bb2...57d0567dddff01feea73b348f38cc040dc3cf8e3

>---------------------------------------------------------------

commit eabdec3a79c30b6f9af3519c5bea0c682c3fff85
Author: ryan <ryan at ratml.org>
Date:   Wed Apr 22 13:46:02 2015 -0400

    Add sameSet parameter.
    This properly handles when the query and reference set are the same (i.e. when Search() is called without a query set).


>---------------------------------------------------------------

eabdec3a79c30b6f9af3519c5bea0c682c3fff85
 src/mlpack/methods/range_search/range_search_impl.hpp       | 2 +-
 src/mlpack/methods/range_search/range_search_rules.hpp      | 8 +++++++-
 src/mlpack/methods/range_search/range_search_rules_impl.hpp | 6 ++++--
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/mlpack/methods/range_search/range_search_impl.hpp b/src/mlpack/methods/range_search/range_search_impl.hpp
index e70446c..97e7e20 100644
--- a/src/mlpack/methods/range_search/range_search_impl.hpp
+++ b/src/mlpack/methods/range_search/range_search_impl.hpp
@@ -343,7 +343,7 @@ void RangeSearch<MetricType, TreeType>::Search(
   // Create the helper object for the traversal.
   typedef RangeSearchRules<MetricType, TreeType> RuleType;
   RuleType rules(referenceSet, referenceSet, range, *neighborPtr, *distancePtr,
-      metric);
+      metric, true /* don't return the query point in the results */);
 
   if (naive)
   {
diff --git a/src/mlpack/methods/range_search/range_search_rules.hpp b/src/mlpack/methods/range_search/range_search_rules.hpp
index 5d925b1..8d4af1a 100644
--- a/src/mlpack/methods/range_search/range_search_rules.hpp
+++ b/src/mlpack/methods/range_search/range_search_rules.hpp
@@ -27,13 +27,16 @@ class RangeSearchRules
    * @param neighbors Vector to store resulting neighbors in.
    * @param distances Vector to store resulting distances in.
    * @param metric Instantiated metric.
+   * @param sameSet If true, the query and reference set are taken to be the
+   *      same, and a query point will not return itself in the results.
    */
   RangeSearchRules(const arma::mat& referenceSet,
                    const arma::mat& querySet,
                    const math::Range& range,
                    std::vector<std::vector<size_t> >& neighbors,
                    std::vector<std::vector<double> >& distances,
-                   MetricType& metric);
+                   MetricType& metric,
+                   const bool sameSet = false);
 
   /**
    * Compute the base case between the given query point and reference point.
@@ -117,6 +120,9 @@ class RangeSearchRules
   //! The instantiated metric.
   MetricType& metric;
 
+  //! If true, the query and reference set are taken to be the same.
+  bool sameSet;
+
   //! The last query index.
   size_t lastQueryIndex;
   //! The last reference index.
diff --git a/src/mlpack/methods/range_search/range_search_rules_impl.hpp b/src/mlpack/methods/range_search/range_search_rules_impl.hpp
index f84ba37..afa6306 100644
--- a/src/mlpack/methods/range_search/range_search_rules_impl.hpp
+++ b/src/mlpack/methods/range_search/range_search_rules_impl.hpp
@@ -20,13 +20,15 @@ RangeSearchRules<MetricType, TreeType>::RangeSearchRules(
     const math::Range& range,
     std::vector<std::vector<size_t> >& neighbors,
     std::vector<std::vector<double> >& distances,
-    MetricType& metric) :
+    MetricType& metric,
+    const bool sameSet) :
     referenceSet(referenceSet),
     querySet(querySet),
     range(range),
     neighbors(neighbors),
     distances(distances),
     metric(metric),
+    sameSet(sameSet),
     lastQueryIndex(querySet.n_cols),
     lastReferenceIndex(referenceSet.n_cols)
 {
@@ -42,7 +44,7 @@ double RangeSearchRules<MetricType, TreeType>::BaseCase(
     const size_t referenceIndex)
 {
   // If the datasets are the same, don't return the point as in its own range.
-  if ((&referenceSet == &querySet) && (queryIndex == referenceIndex))
+  if (sameSet && (queryIndex == referenceIndex))
     return 0.0;
 
   // If we have just performed this base case, don't do it again.



More information about the mlpack-git mailing list