Docs
Loading...
Searching...
No Matches
continuos_cache.hpp
Go to the documentation of this file.
1#pragma once
2
7
9
15
17public:
18 // Important to declare the struct useful.
19 // HINT: If the name changed modified the file which uses it accordingly.
25 struct ClusterStats {
26 int n = 0;
27 double sum = 0.0;
28 double sumsq = 0.0;
29 };
30
31private:
32 std::vector<ClusterStats> cluster_stats;
33
34public:
35 const Eigen::VectorXd continuos_covariates;
36
37 ContinuosCache(Eigen::VectorXi &initial_allocations, const Eigen::VectorXd &continuos_covariates)
39 cluster_stats.clear();
40
41 const int K = initial_allocations.maxCoeff() + 1;
42 cluster_stats.resize(K);
43
44 // Initialize cluster statistics based on initial allocations
45 for (int i = 0; i < initial_allocations.size(); ++i) {
46 int cluster = initial_allocations(i);
47 if (cluster < 0)
48 continue;
49
50 double value = continuos_covariates(i);
51 ClusterStats &stats = cluster_stats[cluster];
52 stats.n++;
53 stats.sum += value;
54 stats.sumsq += value * value;
55 }
56 }
57
65 void set_allocation(int index, int cluster, int old_cluster) override;
66
72 inline ClusterStats get_cluster_stats(int cluster) const { return cluster_stats[cluster]; }
73
79 inline const ClusterStats &get_cluster_stats_ref(int cluster) const { return cluster_stats[cluster]; }
80
86 void recompute(const int K, const Eigen::VectorXi &allocations) override;
87
93 inline void move_cluster_info(int from_cluster, int to_cluster) override {
94 cluster_stats[to_cluster] = std::move(cluster_stats[from_cluster]);
95 };
96
101 void remove_info(int cluster) override;
102};
Abstract base class for managing cluster information and caches.
ClusterInfo()=default
void move_cluster_info(int from_cluster, int to_cluster) override
Moves cluster information from one cluster to another.
Definition continuos_cache.hpp:93
std::vector< ClusterStats > cluster_stats
Definition continuos_cache.hpp:32
ContinuosCache(Eigen::VectorXi &initial_allocations, const Eigen::VectorXd &continuos_covariates)
Definition continuos_cache.hpp:37
void recompute(const int K, const Eigen::VectorXi &allocations) override
Recomputes all cluster information from current allocations.
Definition continuos_cache.cpp:34
const ClusterStats & get_cluster_stats_ref(int cluster) const
Get cluster statistics reference for a specific cluster.
Definition continuos_cache.hpp:79
void set_allocation(int index, int cluster, int old_cluster) override
Assigns a point to a cluster.
Definition continuos_cache.cpp:8
void remove_info(int cluster) override
Removes information related to a specific cluster.
Definition continuos_cache.cpp:56
const Eigen::VectorXd continuos_covariates
Definition continuos_cache.hpp:35
ClusterStats get_cluster_stats(int cluster) const
Get cluster statistics for a specific cluster.
Definition continuos_cache.hpp:72
Structure to hold statistics for each cluster.
Definition continuos_cache.hpp:25
double sum
Definition continuos_cache.hpp:27
double sumsq
Definition continuos_cache.hpp:28
int n
Definition continuos_cache.hpp:26