[mlpack-git] master: Update kmeans implementation to use rvalue references. (4f5ef3c)
gitdub at mlpack.org
gitdub at mlpack.org
Mon Aug 29 13:23:32 EDT 2016
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/1148f1652e139c9037eb3813550090313d089a30...a8a8a1381b529a01420de6e792a4a1e7bd58a626
>---------------------------------------------------------------
commit 4f5ef3c036f6ae11f173005099e1c1add7b501b9
Author: MarcosPividori <marcos.pividori at gmail.com>
Date: Mon Aug 29 14:23:32 2016 -0300
Update kmeans implementation to use rvalue references.
>---------------------------------------------------------------
4f5ef3c036f6ae11f173005099e1c1add7b501b9
src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
index ed21c4c..d8deb55 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
@@ -101,17 +101,17 @@ double DualTreeKMeans<MetricType, MatType, TreeType>::Iterate(
std::vector<size_t> oldFromNewCentroids;
Tree* centroidTree = BuildTree<Tree>(centroids, oldFromNewCentroids);
+ // Find the nearest neighbors of each of the clusters. We have to make our
+ // own TreeType, which is a little bit abuse, but we know for sure the
+ // TreeStatType we have will work.
+ neighbor::NeighborSearch<neighbor::NearestNeighborSort, MetricType, MatType,
+ NNSTreeType> nns(std::move(*centroidTree));
+
// Reset information in the tree, if we need to.
if (iteration > 0)
{
Timer::Start("knn");
- // Find the nearest neighbors of each of the clusters. We have to make our
- // own TreeType, which is a little bit abuse, but we know for sure the
- // TreeStatType we have will work.
- neighbor::NeighborSearch<neighbor::NearestNeighborSort, MetricType, MatType,
- NNSTreeType> nns(centroidTree);
-
// If the tree maps points, we need an intermediate result matrix.
arma::mat* interclusterDistancesTemp =
(tree::TreeTraits<Tree>::RearrangesDataset) ?
@@ -148,8 +148,9 @@ double DualTreeKMeans<MetricType, MatType, TreeType>::Iterate(
// We won't use the KNN class here because we have our own set of rules.
lastIterationCentroids = centroids;
typedef DualTreeKMeansRules<MetricType, Tree> RuleType;
- RuleType rules(centroidTree->Dataset(), dataset, assignments, upperBounds,
- lowerBounds, metric, prunedPoints, oldFromNewCentroids, visited);
+ RuleType rules(nns.ReferenceTree().Dataset(), dataset, assignments,
+ upperBounds, lowerBounds, metric, prunedPoints, oldFromNewCentroids,
+ visited);
typename Tree::template BreadthFirstDualTreeTraverser<RuleType>
traverser(rules);
@@ -160,7 +161,7 @@ double DualTreeKMeans<MetricType, MatType, TreeType>::Iterate(
// Set the number of pruned centroids in the root to 0.
tree->Stat().Pruned() = 0;
- traverser.Traverse(*tree, *centroidTree);
+ traverser.Traverse(*tree, nns.ReferenceTree());
distanceCalculations += rules.BaseCases() + rules.Scores();
Timer::Start("tree_mod");
More information about the mlpack-git
mailing list