noparama  v0.0.1
Nonparametric Bayesian models
membertrix.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Eigen/Dense>
4 #include "np_data.h"
5 #include "np_cluster.h"
6 
7 #include <map>
8 #include <unordered_map>
9 
11 typedef std::unordered_map<cluster_id_t, cluster_t*> clusters_t;
12 
14 typedef std::unordered_map<cluster_id_t, dataset_t*> clusters_dataset_t;
15 
17 
18 static std::map< np_error_t, const char * > np_error_str = {
19  {error_none, "none"},
20  {error_already_assigned, "already assigned"},
21  {error_assignment_remaining, "assignment remaining"},
22  {error_assignment_absent, "assignment absent"}
23 };
24 
30 typedef Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic> binary_matrix_t;
31 
52 class membertrix {
53  private:
54  // membership matrix
55  binary_matrix_t _membership_matrix;
56 
57  // map from cluster pointers to column entries
58  clusters_t _cluster_objects;
59 
60  // map from data pointers to row entries
61  dataset_t _data_objects;
62 
63  // store data items per cluster
64  clusters_dataset_t _clusters_dataset;
65 
66  // verbosity
67  char _verbosity;
68 
69  protected:
70 
71  bool exists(cluster_id_t cluster_id);
72 
73  public:
77  membertrix();
78 
88  membertrix(const membertrix &other);
89 
90  membertrix* clone();
91 
95  ~membertrix();
96 
107 
114  cluster_t * getCluster(cluster_id_t cluster_id);
115 
125  data_id_t addData(data_t & data);
126 
133  data_t * getDatum(data_id_t data_id);
134 
142  np_error_t assign(cluster_id_t cluster_id, data_id_t data_id);
143 
152  np_error_t retract(cluster_id_t cluster_id, data_id_t data_id, bool auto_remove = true);
153 
164  np_error_t retract(data_id_t data_id, bool auto_remove = true);
165 
173  np_error_t remove(cluster_id_t cluster_id);
174 
182  bool assigned(data_id_t data_id) const;
183 
190  void getAssignments(cluster_id_t cluster_id, data_ids_t & data_ids) const;
191 
197  cluster_id_t getClusterId(data_id_t data_id) const;
198 
208  const clusters_t & getClusters() const;
209 
215  size_t getClusterCount() const;
216 
223  void relabel();
224 
228  void print(cluster_id_t cluster_id, std::ostream &os) const;
229 
233  void print(std::ostream& os) const;
234 
238  friend std::ostream& operator<<(std::ostream& os, const membertrix& m);
239 
245  dataset_t* getData();
246 
253  dataset_t* getData(const cluster_id_t cluster_id) const;
254 
255  void getData(const cluster_id_t cluster_id, dataset_t & dataset) const;
256 
264  void getData(const data_ids_t data_ids, dataset_t & dataset) const;
265 
271  size_t count(cluster_id_t cluster_id) const;
272 
278  size_t count() const;
279 
284  bool empty(cluster_id_t cluster_id);
285 
290  int cleanup();
291 
300 
305  friend void swap(membertrix& first, membertrix& second) {
306  using std::swap;
307 
308  swap(first._membership_matrix, second._membership_matrix);
309  swap(first._cluster_objects, second._cluster_objects);
310  swap(first._data_objects, second._data_objects);
311  swap(first._clusters_dataset, second._clusters_dataset);
312  swap(first._verbosity, second._verbosity);
313  }
314 };
data_t * getDatum(data_id_t data_id)
Definition: membertrix.cpp:134
bool assigned(data_id_t data_id) const
Definition: membertrix.cpp:160
cluster_id_t getClusterId(data_id_t data_id) const
Definition: membertrix.cpp:229
cluster_id_t addCluster(cluster_t *cluster)
Definition: membertrix.cpp:81
np_error_t retract(cluster_id_t cluster_id, data_id_t data_id, bool auto_remove=true)
Definition: membertrix.cpp:169
np_error_t
Definition: membertrix.h:16
Definition: pretty_print.hpp:115
int cleanup()
Definition: membertrix.cpp:337
int cluster_id_t
Index to a cluster.
Definition: np_cluster.h:10
Definition: membertrix.h:52
Eigen::Matrix< bool, Eigen::Dynamic, Eigen::Dynamic > binary_matrix_t
Definition: membertrix.h:30
dataset_t * getData()
Definition: membertrix.cpp:274
data_id_t addData(data_t &data)
Definition: membertrix.cpp:118
Definition: np_cluster.h:27
Definition: pretty_print.hpp:112
void getAssignments(cluster_id_t cluster_id, data_ids_t &data_ids) const
Definition: membertrix.cpp:309
friend void swap(membertrix &first, membertrix &second)
Definition: membertrix.h:305
Definition: membertrix.h:16
~membertrix()
Definition: membertrix.cpp:74
void relabel()
Definition: membertrix.cpp:253
int data_id_t
Definition: np_data.h:20
membertrix()
Definition: membertrix.cpp:24
np_error_t assign(cluster_id_t cluster_id, data_id_t data_id)
Definition: membertrix.cpp:141
size_t getClusterCount() const
Definition: membertrix.cpp:240
bool exists(cluster_id_t cluster_id)
Definition: membertrix.cpp:164
membertrix * clone()
Definition: membertrix.cpp:51
cluster_t * getCluster(cluster_id_t cluster_id)
Definition: membertrix.cpp:114
const clusters_t & getClusters() const
Definition: membertrix.cpp:244
Definition: membertrix.h:16
bool empty(cluster_id_t cluster_id)
Definition: membertrix.cpp:318
Definition: membertrix.h:16
std::unordered_map< cluster_id_t, dataset_t * > clusters_dataset_t
A dataset per cluster.
Definition: membertrix.h:14
size_t count() const
Definition: membertrix.cpp:326
membertrix & operator=(membertrix other)
Definition: membertrix.cpp:360
void print(cluster_id_t cluster_id, std::ostream &os) const
friend std::ostream & operator<<(std::ostream &os, const membertrix &m)
Definition: membertrix.cpp:269
std::unordered_map< cluster_id_t, cluster_t * > clusters_t
Hashmap for the cluster indices and cluster objects.
Definition: membertrix.h:11
Definition: membertrix.h:16