[mlpack-git] master: Use !oldFromNewReferences.empty() instead of treeOwner to determine if the map oldFromNewReferences should be considered. (d85cd15)
gitdub at mlpack.org
gitdub at mlpack.org
Tue Aug 23 15:58:25 EDT 2016
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/1148f1652e139c9037eb3813550090313d089a30...a8a8a1381b529a01420de6e792a4a1e7bd58a626
>---------------------------------------------------------------
commit d85cd152796965f22fa1a7fead85dae3c7e6a3b6
Author: MarcosPividori <marcos.pividori at gmail.com>
Date: Tue Aug 23 16:04:54 2016 -0300
Use !oldFromNewReferences.empty() instead of treeOwner to determine
if the map oldFromNewReferences should be considered.
>---------------------------------------------------------------
d85cd152796965f22fa1a7fead85dae3c7e6a3b6
.../neighbor_search/neighbor_search_impl.hpp | 52 ++++++++++++----------
1 file changed, 29 insertions(+), 23 deletions(-)
diff --git a/src/mlpack/methods/neighbor_search/neighbor_search_impl.hpp b/src/mlpack/methods/neighbor_search/neighbor_search_impl.hpp
index af5d4cc..a32eb67 100644
--- a/src/mlpack/methods/neighbor_search/neighbor_search_impl.hpp
+++ b/src/mlpack/methods/neighbor_search/neighbor_search_impl.hpp
@@ -178,7 +178,6 @@ template<typename SortPolicy,
template<typename> class SingleTreeTraversalType>
NeighborSearch<SortPolicy, MetricType, MatType, TreeType, DualTreeTraversalType,
SingleTreeTraversalType>::NeighborSearch(Tree& referenceTree,
- std::vector<size_t>& oldFromNew,
const NeighborSearchMode mode,
const double epsilon,
const MetricType metric) :
@@ -198,13 +197,6 @@ SingleTreeTraversalType>::NeighborSearch(Tree& referenceTree,
if (epsilon < 0)
throw std::invalid_argument("epsilon must be non-negative");
- if (tree::TreeTraits<Tree>::RearrangesDataset)
- {
- if (oldFromNew.size() != referenceSet->n_cols)
- throw std::invalid_argument("the size of oldFromNew vector must match the"
- " number of points in the given dataset");
- oldFromNewReferences = oldFromNew;
- }
}
// Construct the object.
@@ -218,7 +210,6 @@ template<typename SortPolicy,
template<typename> class SingleTreeTraversalType>
NeighborSearch<SortPolicy, MetricType, MatType, TreeType, DualTreeTraversalType,
SingleTreeTraversalType>::NeighborSearch(Tree&& referenceTree,
- std::vector<size_t>&& oldFromNew,
const NeighborSearchMode mode,
const double epsilon,
const MetricType metric) :
@@ -238,13 +229,6 @@ SingleTreeTraversalType>::NeighborSearch(Tree&& referenceTree,
if (epsilon < 0)
throw std::invalid_argument("epsilon must be non-negative");
- if (tree::TreeTraits<Tree>::RearrangesDataset)
- {
- if (oldFromNew.size() != referenceSet->n_cols)
- throw std::invalid_argument("the size of oldFromNew vector must match the"
- " number of points in the given dataset");
- oldFromNewReferences = std::move(oldFromNew);
- }
}
// Construct the object without a reference dataset.
@@ -471,7 +455,10 @@ DualTreeTraversalType, SingleTreeTraversalType>::Train(
// Clean up the old tree, if we built one.
if (treeOwner && referenceTree)
+ {
+ oldFromNewReferences.clear();
delete referenceTree;
+ }
// We may need to rebuild the tree.
if (searchMode != NAIVE_MODE)
@@ -512,7 +499,10 @@ DualTreeTraversalType, SingleTreeTraversalType>::Train(MatType&& referenceSetIn)
// Clean up the old tree, if we built one.
if (treeOwner && referenceTree)
+ {
+ oldFromNewReferences.clear();
delete referenceTree;
+ }
// We may need to rebuild the tree.
if (searchMode != NAIVE_MODE)
@@ -561,7 +551,11 @@ DualTreeTraversalType, SingleTreeTraversalType>::Train(Tree* referenceTree)
"naive search (without trees) is desired");
if (treeOwner && this->referenceTree)
+ {
+ oldFromNewReferences.clear();
delete this->referenceTree;
+ }
+
if (setOwner && referenceSet)
delete this->referenceSet;
@@ -590,7 +584,11 @@ DualTreeTraversalType, SingleTreeTraversalType>::Train(Tree& referenceTree)
"naive search (without trees) is desired");
if (treeOwner && this->referenceTree)
+ {
+ oldFromNewReferences.clear();
delete this->referenceTree;
+ }
+
if (setOwner && referenceSet)
delete this->referenceSet;
@@ -619,7 +617,11 @@ DualTreeTraversalType, SingleTreeTraversalType>::Train(Tree&& referenceTree)
"naive search (without trees) is desired");
if (treeOwner && this->referenceTree)
+ {
+ oldFromNewReferences.clear();
delete this->referenceTree;
+ }
+
if (setOwner && referenceSet)
delete this->referenceSet;
@@ -682,7 +684,7 @@ DualTreeTraversalType, SingleTreeTraversalType>::Search(
distancePtr = new arma::mat; // Query indices need to be mapped.
neighborPtr = new arma::Mat<size_t>;
}
- else if (treeOwner)
+ else if (!oldFromNewReferences.empty())
neighborPtr = new arma::Mat<size_t>; // Reference indices need mapping.
}
@@ -792,7 +794,7 @@ DualTreeTraversalType, SingleTreeTraversalType>::Search(
// Map points back to original indices, if necessary.
if (tree::TreeTraits<Tree>::RearrangesDataset)
{
- if (searchMode == DUAL_TREE_MODE && treeOwner)
+ if (searchMode == DUAL_TREE_MODE && !oldFromNewReferences.empty())
{
// We must map both query and reference indices.
neighbors.set_size(k, querySet.n_cols);
@@ -833,7 +835,7 @@ DualTreeTraversalType, SingleTreeTraversalType>::Search(
delete neighborPtr;
delete distancePtr;
}
- else if (treeOwner)
+ else if (!oldFromNewReferences.empty())
{
// We must map reference indices only.
neighbors.set_size(k, querySet.n_cols);
@@ -892,7 +894,8 @@ DualTreeTraversalType, SingleTreeTraversalType>::Search(
// We won't need to map query indices, but will we need to map distances?
arma::Mat<size_t>* neighborPtr = &neighbors;
- if (treeOwner && tree::TreeTraits<Tree>::RearrangesDataset)
+ if (!oldFromNewReferences.empty() &&
+ tree::TreeTraits<Tree>::RearrangesDataset)
neighborPtr = new arma::Mat<size_t>;
neighborPtr->set_size(k, querySet.n_cols);
@@ -920,7 +923,8 @@ DualTreeTraversalType, SingleTreeTraversalType>::Search(
Timer::Stop("computing_neighbors");
// Do we need to map indices?
- if (treeOwner && tree::TreeTraits<Tree>::RearrangesDataset)
+ if (!oldFromNewReferences.empty() &&
+ tree::TreeTraits<Tree>::RearrangesDataset)
{
// We must map reference indices only.
neighbors.set_size(k, querySet.n_cols);
@@ -968,7 +972,8 @@ DualTreeTraversalType, SingleTreeTraversalType>::Search(
arma::Mat<size_t>* neighborPtr = &neighbors;
arma::mat* distancePtr = &distances;
- if (tree::TreeTraits<Tree>::RearrangesDataset && treeOwner)
+ if (!oldFromNewReferences.empty() &&
+ tree::TreeTraits<Tree>::RearrangesDataset)
{
// We will always need to rearrange in this case.
distancePtr = new arma::mat;
@@ -1090,7 +1095,8 @@ DualTreeTraversalType, SingleTreeTraversalType>::Search(
Timer::Stop("computing_neighbors");
// Do we need to map the reference indices?
- if (treeOwner && tree::TreeTraits<Tree>::RearrangesDataset)
+ if (!oldFromNewReferences.empty() &&
+ tree::TreeTraits<Tree>::RearrangesDataset)
{
neighbors.set_size(k, referenceSet->n_cols);
distances.set_size(k, referenceSet->n_cols);
More information about the mlpack-git
mailing list