[mlpack-git] master: Don't use a reference internally. (62eb2db)
gitdub at big.cc.gt.atl.ga.us
gitdub at big.cc.gt.atl.ga.us
Tue Dec 22 17:02:12 EST 2015
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/6ab20afd8adaf9dcb86bc9a8ea98a24dd8b18743...eb41f4bc27b484c347acc006255104e2f8cc4eef
>---------------------------------------------------------------
commit 62eb2dbf474a9302c1d95e43570310b3663f4e9f
Author: ryan <ryan at ratml.org>
Date: Tue Dec 22 14:51:23 2015 -0500
Don't use a reference internally.
>---------------------------------------------------------------
62eb2dbf474a9302c1d95e43570310b3663f4e9f
src/mlpack/methods/fastmks/fastmks.hpp | 5 +++--
src/mlpack/methods/fastmks/fastmks_impl.hpp | 30 ++++++++++++++---------------
2 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/src/mlpack/methods/fastmks/fastmks.hpp b/src/mlpack/methods/fastmks/fastmks.hpp
index 442be27..6ba3bd3 100644
--- a/src/mlpack/methods/fastmks/fastmks.hpp
+++ b/src/mlpack/methods/fastmks/fastmks.hpp
@@ -187,8 +187,9 @@ class FastMKS
bool& SingleMode() { return singleMode; }
private:
- //! The reference dataset.
- const MatType& referenceSet;
+ //! The reference dataset. We never own this; only the tree or a higher level
+ //! does.
+ const MatType* referenceSet;
//! The tree built on the reference dataset.
Tree* referenceTree;
//! If true, this object created the tree and is responsible for it.
diff --git a/src/mlpack/methods/fastmks/fastmks_impl.hpp b/src/mlpack/methods/fastmks/fastmks_impl.hpp
index 4cc096b..4b9879f 100644
--- a/src/mlpack/methods/fastmks/fastmks_impl.hpp
+++ b/src/mlpack/methods/fastmks/fastmks_impl.hpp
@@ -28,7 +28,7 @@ FastMKS<KernelType, MatType, TreeType>::FastMKS(
const MatType& referenceSet,
const bool singleMode,
const bool naive) :
- referenceSet(referenceSet),
+ referenceSet(&referenceSet),
referenceTree(NULL),
treeOwner(true),
singleMode(singleMode),
@@ -52,7 +52,7 @@ FastMKS<KernelType, MatType, TreeType>::FastMKS(const MatType& referenceSet,
KernelType& kernel,
const bool singleMode,
const bool naive) :
- referenceSet(referenceSet),
+ referenceSet(&referenceSet),
referenceTree(NULL),
treeOwner(true),
singleMode(singleMode),
@@ -76,7 +76,7 @@ template<typename KernelType,
typename TreeMatType> class TreeType>
FastMKS<KernelType, MatType, TreeType>::FastMKS(Tree* referenceTree,
const bool singleMode) :
- referenceSet(referenceTree->Dataset()),
+ referenceSet(&referenceTree->Dataset()),
referenceTree(referenceTree),
treeOwner(false),
singleMode(singleMode),
@@ -124,10 +124,10 @@ void FastMKS<KernelType, MatType, TreeType>::Search(
// Simple double loop. Stupid, slow, but a good benchmark.
for (size_t q = 0; q < querySet.n_cols; ++q)
{
- for (size_t r = 0; r < referenceSet.n_cols; ++r)
+ for (size_t r = 0; r < referenceSet->n_cols; ++r)
{
const double eval = metric.Kernel().Evaluate(querySet.col(q),
- referenceSet.col(r));
+ referenceSet->col(r));
size_t insertPosition;
for (insertPosition = 0; insertPosition < indices.n_rows;
@@ -154,7 +154,7 @@ void FastMKS<KernelType, MatType, TreeType>::Search(
// Create rules object (this will store the results). This constructor
// precalculates each self-kernel value.
typedef FastMKSRules<KernelType, Tree> RuleType;
- RuleType rules(referenceSet, querySet, indices, kernels, metric.Kernel());
+ RuleType rules(*referenceSet, querySet, indices, kernels, metric.Kernel());
typename Tree::template SingleTreeTraverser<RuleType> traverser(rules);
@@ -203,7 +203,7 @@ void FastMKS<KernelType, MatType, TreeType>::Search(
Timer::Start("computing_products");
typedef FastMKSRules<KernelType, Tree> RuleType;
- RuleType rules(referenceSet, queryTree->Dataset(), indices, kernels,
+ RuleType rules(*referenceSet, queryTree->Dataset(), indices, kernels,
metric.Kernel());
typename Tree::template DualTreeTraverser<RuleType> traverser(rules);
@@ -228,23 +228,23 @@ void FastMKS<KernelType, MatType, TreeType>::Search(
{
// No remapping will be necessary because we are using the cover tree.
Timer::Start("computing_products");
- indices.set_size(k, referenceSet.n_cols);
- kernels.set_size(k, referenceSet.n_cols);
+ indices.set_size(k, referenceSet->n_cols);
+ kernels.set_size(k, referenceSet->n_cols);
kernels.fill(-DBL_MAX);
// Naive implementation.
if (naive)
{
// Simple double loop. Stupid, slow, but a good benchmark.
- for (size_t q = 0; q < referenceSet.n_cols; ++q)
+ for (size_t q = 0; q < referenceSet->n_cols; ++q)
{
- for (size_t r = 0; r < referenceSet.n_cols; ++r)
+ for (size_t r = 0; r < referenceSet->n_cols; ++r)
{
if (q == r)
continue; // Don't return the point as its own candidate.
- const double eval = metric.Kernel().Evaluate(referenceSet.col(q),
- referenceSet.col(r));
+ const double eval = metric.Kernel().Evaluate(referenceSet->col(q),
+ referenceSet->col(r));
size_t insertPosition;
for (insertPosition = 0; insertPosition < indices.n_rows;
@@ -268,12 +268,12 @@ void FastMKS<KernelType, MatType, TreeType>::Search(
// Create rules object (this will store the results). This constructor
// precalculates each self-kernel value.
typedef FastMKSRules<KernelType, Tree> RuleType;
- RuleType rules(referenceSet, referenceSet, indices, kernels,
+ RuleType rules(*referenceSet, *referenceSet, indices, kernels,
metric.Kernel());
typename Tree::template SingleTreeTraverser<RuleType> traverser(rules);
- for (size_t i = 0; i < referenceSet.n_cols; ++i)
+ for (size_t i = 0; i < referenceSet->n_cols; ++i)
traverser.Traverse(i, *referenceTree);
// Save the number of pruned nodes.
More information about the mlpack-git
mailing list