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;
48 virtual const Data_* get_observation(Index_ i) = 0;
49};
50
60template<typename Index_, typename Data_>
86
96template<typename Index_, typename Data_>
98public:
102 IndexedAccessExtractor() = default;
105 IndexedAccessExtractor& operator=(const IndexedAccessExtractor&) = default;
106 IndexedAccessExtractor& operator=(IndexedAccessExtractor&&) = default;
107 virtual ~IndexedAccessExtractor() = default;
120 virtual const Data_* get_observation() = 0;
121};
122
132template<typename Index_, typename Data_>
133class Matrix {
134public:
138 Matrix() = default;
139 Matrix(const Matrix&) = default;
140 Matrix(Matrix&&) = default;
141 Matrix& operator=(const Matrix&) = default;
142 Matrix& operator=(Matrix&&) = default;
143 virtual ~Matrix() = default;
148public:
152 virtual Index_ num_observations() const = 0;
153
157 virtual std::size_t num_dimensions() const = 0;
158
159public:
163 virtual std::unique_ptr<RandomAccessExtractor<Index_, Data_> > new_extractor() const = 0;
164
170 virtual std::unique_ptr<ConsecutiveAccessExtractor<Index_, Data_> > new_extractor(Index_ start, Index_ length) const = 0;
171
178 virtual std::unique_ptr<IndexedAccessExtractor<Index_, Data_> > new_extractor(const Index_* sequence, std::size_t length) const = 0;
179};
180
184// A simple alias to help determine the Index_ inside a Matrix_ instance.
185template<class Matrix_>
186using Index = decltype(I(std::declval<Matrix_>().num_observations()));
190}
191
192#endif
Extractor for accessing consecutive observations.
Definition Matrix.hpp:61
virtual const Data_ * get_observation()=0
Extractor for accessing indexed observations.
Definition Matrix.hpp:97
virtual const Data_ * get_observation()=0
Interface for matrix data.
Definition Matrix.hpp:133
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