[mlpack-git] master: Fix unnecessary copy. (644dfd9)
gitdub at big.cc.gt.atl.ga.us
gitdub at big.cc.gt.atl.ga.us
Wed May 20 23:06:00 EDT 2015
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/77d750c8fd46140b1d6060424f68768a21c89377...7e9cd46afb53817ae93ccbd02637d7726137ce4d
>---------------------------------------------------------------
commit 644dfd9808f06b23596d59cbcb45ed579c75a55a
Author: Ryan Curtin <ryan at ratml.org>
Date: Tue May 19 15:31:09 2015 -0400
Fix unnecessary copy.
>---------------------------------------------------------------
644dfd9808f06b23596d59cbcb45ed579c75a55a
src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
index 697fb26..d29e290 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
@@ -105,12 +105,18 @@ double DualTreeKMeans<MetricType, MatType, TreeType>::Iterate(
if (iteration > 0)
{
Timer::Start("knn");
+
// Find the nearest neighbors of each of the clusters.
neighbor::NeighborSearch<neighbor::NearestNeighborSort, MetricType,
TreeType> nns(centroidTree);
- arma::mat interclusterDistancesTemp;
+
+ // If the tree maps points, we need an intermediate result matrix.
+ arma::mat* interclusterDistancesTemp =
+ (tree::TreeTraits<TreeType>::RearrangesDataset) ? new arma::mat :
+ &interclusterDistances;
+
arma::Mat<size_t> closestClusters; // We don't actually care about these.
- nns.Search(1, closestClusters, interclusterDistancesTemp);
+ nns.Search(1, closestClusters, *interclusterDistancesTemp);
distanceCalculations += nns.BaseCases() + nns.Scores();
// We need to do the unmapping ourselves, if the tree does mapping.
@@ -118,12 +124,9 @@ double DualTreeKMeans<MetricType, MatType, TreeType>::Iterate(
{
for (size_t i = 0; i < interclusterDistances.n_elem; ++i)
interclusterDistances[oldFromNewCentroids[i]] =
- interclusterDistancesTemp[i];
- }
- else
- {
- // TODO: avoid copy.
- interclusterDistances = interclusterDistancesTemp;
+ (*interclusterDistancesTemp)[i];
+
+ delete interclusterDistancesTemp;
}
Timer::Stop("knn");
More information about the mlpack-git
mailing list