knncolle
Collection of KNN methods in C++
Loading...
Searching...
No Matches
Matrix.hpp
Go to the documentation of this file.
1#ifndef KNNCOLLE_MATRIX_HPP
2#define KNNCOLLE_MATRIX_HPP
3
9namespace knncolle {
10
16template<typename Data_>
18public:
22 MatrixExtractor() = default;
23 MatrixExtractor(const MatrixExtractor&) = default;
25 MatrixExtractor& operator=(const MatrixExtractor&) = default;
26 MatrixExtractor& operator=(MatrixExtractor&&) = default;
27 virtual ~MatrixExtractor() = default;
32public:
40 virtual const Data_* next() = 0;
41};
42
43
52template<typename Index_, typename Data_>
53class Matrix {
54public:
58 Matrix() = default;
59 Matrix(const Matrix&) = default;
60 Matrix(Matrix&&) = default;
61 Matrix& operator=(const Matrix&) = default;
62 Matrix& operator=(Matrix&&) = default;
63 virtual ~Matrix() = default;
68public:
72 virtual Index_ num_observations() const = 0;
73
77 virtual size_t num_dimensions() const = 0;
78
79public:
83 virtual std::unique_ptr<MatrixExtractor<Data_> > new_extractor() const = 0;
84};
85
93template<typename Data_>
94class SimpleMatrixExtractor final : public MatrixExtractor<Data_> {
95public:
99 SimpleMatrixExtractor(const Data_* data, size_t dim) : my_data(data), my_dim(dim) {}
104private:
105 const Data_* my_data;
106 size_t my_dim;
107 size_t at = 0;
108
109public:
110 const Data_* next() {
111 return my_data + (at++) * my_dim; // already size_t's to avoid overflow during multiplication.
112 }
113};
114
124template<typename Index_, typename Data_>
125class SimpleMatrix final : public Matrix<Index_, Data_> {
126public:
133 SimpleMatrix(size_t num_dimensions, Index_ num_observations, const Data_* data) :
134 my_num_dim(num_dimensions), my_num_obs(num_observations), my_data(data) {}
135
136private:
137 size_t my_num_dim;
138 Index_ my_num_obs;
139 const Data_* my_data;
140
141public:
142 Index_ num_observations() const {
143 return my_num_obs;
144 }
145
146 size_t num_dimensions() const {
147 return my_num_dim;
148 }
149
150 std::unique_ptr<MatrixExtractor<Data_> > new_extractor() const {
151 return std::make_unique<SimpleMatrixExtractor<Data_> >(my_data, my_num_dim);
152 }
153};
154
155}
156
157#endif
Extractor interface for matrix data.
Definition Matrix.hpp:17
virtual const Data_ * next()=0
Interface for matrix data.
Definition Matrix.hpp:53
virtual std::unique_ptr< MatrixExtractor< Data_ > > new_extractor() const =0
virtual Index_ num_observations() const =0
virtual size_t num_dimensions() const =0
Extractor for a SimpleMatrix.
Definition Matrix.hpp:94
const Data_ * next()
Definition Matrix.hpp:110
Simple wrapper for an in-memory matrix.
Definition Matrix.hpp:125
SimpleMatrix(size_t num_dimensions, Index_ num_observations, const Data_ *data)
Definition Matrix.hpp:133
std::unique_ptr< MatrixExtractor< Data_ > > new_extractor() const
Definition Matrix.hpp:150
Index_ num_observations() const
Definition Matrix.hpp:142
size_t num_dimensions() const
Definition Matrix.hpp:146
Collection of KNN algorithms.
Definition Bruteforce.hpp:23