kmeans
k-means clustering in C++
Loading...
Searching...
No Matches
Matrix.hpp
Go to the documentation of this file.
1#ifndef KMEANS_MATRIX_HPP
2#define KMEANS_MATRIX_HPP
3
4#include <memory>
5#include <utility>
6#include <cstddef>
7
8#include "utils.hpp"
9
15namespace kmeans {
16
26template<typename Index_, typename Data_>
28public:
32 RandomAccessExtractor() = default;
35 RandomAccessExtractor& operator=(const RandomAccessExtractor&) = default;
36 RandomAccessExtractor& operator=(RandomAccessExtractor&&) = default;
37 virtual ~RandomAccessExtractor() = default;
51 virtual const Data_* get_observation(Index_ i) = 0;
52};
53
63template<typename Index_, typename Data_>
92
102template<typename Index_, typename Data_>
104public:
108 IndexedAccessExtractor() = default;
111 IndexedAccessExtractor& operator=(const IndexedAccessExtractor&) = default;
112 IndexedAccessExtractor& operator=(IndexedAccessExtractor&&) = default;
113 virtual ~IndexedAccessExtractor() = default;
129 virtual const Data_* get_observation() = 0;
130};
131
141template<typename Index_, typename Data_>
142class Matrix {
143public:
147 Matrix() = default;
148 Matrix(const Matrix&) = default;
149 Matrix(Matrix&&) = default;
150 Matrix& operator=(const Matrix&) = default;
151 Matrix& operator=(Matrix&&) = default;
152 virtual ~Matrix() = default;
157public:
161 virtual Index_ num_observations() const = 0;
162
166 virtual std::size_t num_dimensions() const = 0;
167
168public:
172 virtual std::unique_ptr<RandomAccessExtractor<Index_, Data_> > new_extractor() const = 0;
173
179 virtual std::unique_ptr<ConsecutiveAccessExtractor<Index_, Data_> > new_extractor(Index_ start, Index_ length) const = 0;
180
187 virtual std::unique_ptr<IndexedAccessExtractor<Index_, Data_> > new_extractor(const Index_* sequence, std::size_t length) const = 0;
188};
189
193// A simple alias to help determine the Index_ inside a Matrix_ instance.
194template<class Matrix_>
195using Index = I<decltype(std::declval<Matrix_>().num_observations())>;
199}
200
201#endif
Extractor for accessing consecutive observations.
Definition Matrix.hpp:64
virtual const Data_ * get_observation()=0
Extractor for accessing indexed observations.
Definition Matrix.hpp:103
virtual const Data_ * get_observation()=0
Interface for matrix data.
Definition Matrix.hpp:142
virtual std::unique_ptr< ConsecutiveAccessExtractor< Index_, Data_ > > new_extractor(Index_ start, Index_ length) const =0
virtual std::size_t num_dimensions() const =0
virtual std::unique_ptr< RandomAccessExtractor< Index_, Data_ > > new_extractor() const =0
virtual Index_ num_observations() const =0
virtual std::unique_ptr< IndexedAccessExtractor< Index_, Data_ > > new_extractor(const Index_ *sequence, std::size_t length) const =0
Extractor for accessing random observations.
Definition Matrix.hpp:27
virtual const Data_ * get_observation(Index_ i)=0
Perform k-means clustering.
Definition compute_wcss.hpp:16