[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