50 const std::size_t num_dimensions,
51 const Index_ num_observations,
52 Cluster_*
const clusters,
53 const Cluster_ num_centers,
54 Float_*
const centers,
55 std::vector<Index_>& sizes
57 bool has_zero =
false;
58 for (Cluster_ c = 0; c < num_centers; ++c) {
68 auto remapping = sanisizer::create<std::vector<Index_> >(num_centers);
69 Cluster_ remaining = 0;
70 for (Cluster_ c = 0; c < num_centers; ++c) {
72 remapping[c] = remaining;
75 centers + sanisizer::product_unsafe<std::size_t>(c, num_dimensions),
77 centers + sanisizer::product_unsafe<std::size_t>(remaining, num_dimensions)
79 sizes[remaining] = sizes[c];
85 for (Index_ o = 0; o < num_observations; ++o) {
86 clusters[o] = remapping[clusters[o]];
121 const std::size_t num_dimensions,
122 const Index_ num_observations,
123 Cluster_*
const clusters,
124 const Cluster_ num_centers,
125 Float_*
const centers,
126 std::vector<Index_>& sizes,
129 const auto remaining =
remove_unused_centers(num_dimensions, num_observations, clusters, num_centers, centers, sizes);
131 std::fill(sizes.begin() + remaining, sizes.end(), 0);
134 centers + sanisizer::product_unsafe<std::size_t>(remaining, num_dimensions),
135 centers + sanisizer::product_unsafe<std::size_t>(num_centers, num_dimensions),
Cluster_ remove_unused_centers(const std::size_t num_dimensions, const Index_ num_observations, Cluster_ *const clusters, const Cluster_ num_centers, Float_ *const centers, std::vector< Index_ > &sizes)
Definition remove_unused_centers.hpp:49