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
4#include <memory>
5#include <cstddef>
6
7#include "sanisizer/sanisizer.hpp"
8
14namespace knncolle {
15
21template<typename Data_>
23public:
27 MatrixExtractor() = default;
28 MatrixExtractor(const MatrixExtractor&) = default;
30 MatrixExtractor& operator=(const MatrixExtractor&) = default;
31 MatrixExtractor& operator=(MatrixExtractor&&) = default;
32 virtual ~MatrixExtractor() = default;
37public:
46 virtual const Data_* next() = 0;
47};
48
49
58template<typename Index_, typename Data_>
59class Matrix {
60public:
64 Matrix() = default;
65 Matrix(const Matrix&) = default;
66 Matrix(Matrix&&) = default;
67 Matrix& operator=(const Matrix&) = default;
68 Matrix& operator=(Matrix&&) = default;
69 virtual ~Matrix() = default;
74public:
78 virtual Index_ num_observations() const = 0;
79
83 virtual std::size_t num_dimensions() const = 0;
84
85public:
89 virtual std::unique_ptr<MatrixExtractor<Data_> > new_extractor() const = 0;
90
98 auto new_known_extractor() const {
99 return new_extractor();
100 }
101};
102
106template<typename Data_>
107class SimpleMatrixExtractor final : public MatrixExtractor<Data_> {
108public:
109 SimpleMatrixExtractor(const Data_* data, std::size_t dim) : my_data(data), my_dim(dim) {}
110
111private:
112 const Data_* my_data;
113 std::size_t my_dim;
114 std::size_t at = 0;
115
116public:
117 const Data_* next() {
118 return my_data + sanisizer::product_unsafe<std::size_t>(at++, my_dim);
119 }
120};
134template<typename Index_, typename Data_>
135class SimpleMatrix final : public Matrix<Index_, Data_> {
136public:
143 SimpleMatrix(std::size_t num_dimensions, Index_ num_observations, const Data_* data) :
144 my_num_dim(num_dimensions), my_num_obs(num_observations), my_data(data) {}
145
146private:
147 std::size_t my_num_dim;
148 Index_ my_num_obs;
149 const Data_* my_data;
150
151public:
152 Index_ num_observations() const {
153 return my_num_obs;
154 }
155
156 std::size_t num_dimensions() const {
157 return my_num_dim;
158 }
159
160 std::unique_ptr<MatrixExtractor<Data_> > new_extractor() const {
161 return new_known_extractor();
162 }
163
167 auto new_known_extractor() const {
168 return std::make_unique<SimpleMatrixExtractor<Data_> >(my_data, my_num_dim);
169 }
170};
171
172}
173
174#endif
Extractor interface for matrix data.
Definition Matrix.hpp:22
virtual const Data_ * next()=0
Interface for matrix data.
Definition Matrix.hpp:59
virtual std::size_t num_dimensions() const =0
virtual std::unique_ptr< MatrixExtractor< Data_ > > new_extractor() const =0
auto new_known_extractor() const
Definition Matrix.hpp:98
virtual Index_ num_observations() const =0
Simple wrapper for an in-memory matrix.
Definition Matrix.hpp:135
std::size_t num_dimensions() const
Definition Matrix.hpp:156
std::unique_ptr< MatrixExtractor< Data_ > > new_extractor() const
Definition Matrix.hpp:160
Index_ num_observations() const
Definition Matrix.hpp:152
auto new_known_extractor() const
Definition Matrix.hpp:167
SimpleMatrix(std::size_t num_dimensions, Index_ num_observations, const Data_ *data)
Definition Matrix.hpp:143
Collection of KNN algorithms.
Definition Bruteforce.hpp:29