Refactor to apply mappings earlier.

This commit is contained in:
Ryan Curtin
2015-03-12 15:42:46 -04:00
parent 2201a2f05d
commit 670a56a58f
2 changed files with 8 additions and 12 deletions
+3 -10
View File
@@ -181,9 +181,7 @@ void DTNNKMeans<MetricType, MatType, TreeType>::UpdateTree(
if ((node.Stat().Pruned() == clusterDistances.n_elem - 1) &&
(node.Stat().Owner() < clusterDistances.n_elem - 1))
{
const size_t owner = (tree::TreeTraits<TreeType>::RearrangesDataset) ?
oldFromNewCentroids[node.Stat().Owner()] :
node.Stat().Owner();
const size_t owner = node.Stat().Owner();
node.Stat().LastUpperBound() = node.Stat().UpperBound() +
clusterDistances[owner];
@@ -211,7 +209,6 @@ void DTNNKMeans<MetricType, MatType, TreeType>::UpdateTree(
}
node.Stat().Pruned() = size_t(-1);
node.Stat().Owner() = size_t(-1);
node.Stat().LowerBound() = DBL_MAX;
for (size_t i = 0; i < node.NumChildren(); ++i)
UpdateTree(node.Child(i), clusterDistances, oldFromNewCentroids);
@@ -227,9 +224,7 @@ void DTNNKMeans<MetricType, MatType, TreeType>::ExtractCentroids(
// Does this node own points?
if (node.Stat().Pruned() == newCentroids.n_cols)
{
const size_t owner = (tree::TreeTraits<TreeType>::RearrangesDataset) ?
oldFromNewCentroids[node.Stat().Owner()] :
node.Stat().Owner();
const size_t owner = node.Stat().Owner();
newCentroids.col(owner) += node.Stat().Centroid() * node.NumDescendants();
newCounts[owner] += node.NumDescendants();
}
@@ -241,9 +236,7 @@ void DTNNKMeans<MetricType, MatType, TreeType>::ExtractCentroids(
{
for (size_t i = 0; i < node.NumPoints(); ++i)
{
const size_t owner = (tree::TreeTraits<TreeType>::RearrangesDataset) ?
oldFromNewCentroids[assignments[node.Point(i)]] :
assignments[node.Point(i)];
const size_t owner = assignments[node.Point(i)];
newCentroids.col(owner) += dataset.col(node.Point(i));
++newCounts[owner];
}
@@ -58,7 +58,8 @@ inline force_inline double DTNNKMeansRules<MetricType, TreeType>::BaseCase(
{
lowerBounds[queryIndex] = upperBounds[queryIndex];
upperBounds[queryIndex] = distance;
assignments[queryIndex] = referenceIndex;
assignments[queryIndex] = (tree::TreeTraits<TreeType>::RearrangesDataset) ?
oldFromNewCentroids[referenceIndex] : referenceIndex;
}
else if (distance < lowerBounds[queryIndex])
{
@@ -121,7 +122,9 @@ inline double DTNNKMeansRules<MetricType, TreeType>::Score(
queryNode.Stat().UpperBound() = distances.Hi();
// If this node has only one descendant, then it may be the owner.
if (referenceNode.NumDescendants() == 1)
queryNode.Stat().Owner() = referenceNode.Descendant(0);
queryNode.Stat().Owner() = (tree::TreeTraits<TreeType>::RearrangesDataset)
? oldFromNewCentroids[referenceNode.Descendant(0)]
: referenceNode.Descendant(0);
}
// Is everything pruned?