Skip to content

Commit d967ea8

Browse files
fix: simplify k-means clustering implementation
1 parent 78231f7 commit d967ea8

File tree

1 file changed

+6
-14
lines changed

1 file changed

+6
-14
lines changed

src/diffCheck/geometry/DFPointCloud.cc

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -236,22 +236,14 @@ namespace diffCheck::geometry
236236
cilantro::KMeans<double, 3> kmeans(normalMatrix);
237237
kmeans.cluster(nComponents);
238238

239-
const auto& centroids = kmeans.getClusterCentroids();
240-
const auto& assignments = kmeans.getPointToClusterIndexMap();
241-
242-
std::vector<std::pair<int, Eigen::Vector3d>> clusters(nComponents);
243-
for (size_t i = 0; i < nComponents; ++i)
239+
const cilantro::VectorSet3d& centroids = kmeans.getClusterCentroids();
240+
const std::vector<size_t>& assignments = kmeans.getPointToClusterIndexMap();
241+
std::vector<int> clusterSizes(nComponents, 0);
242+
for (size_t i = 0; i < assignments.size(); ++i)
244243
{
245-
clusters[i] = {i, centroids.col(i)};
244+
clusterSizes[assignments[i]]++;
246245
}
247-
std::sort(clusters.begin(), clusters.end(), [](const auto& a, const auto& b)
248-
{
249-
return a.second.norm() < b.second.norm();
250-
});
251-
252-
std::vector<std::pair<int, Eigen::Vector3d>> sortedClusters(nComponents);
253-
std::vector<int> clusterSizes(nComponents, 0);
254-
246+
// Sort clusters by size
255247
std::vector<std::pair<int, Eigen::Vector3d>> sortedClustersBySize(nComponents);
256248
for (size_t i = 0; i < nComponents; ++i)
257249
{

0 commit comments

Comments
 (0)