SiGraph: sulcal graphs


matrixDimreductor.h
Go to the documentation of this file.
1
2#ifndef SI_FS_MATRIXFS_H
3#define SI_FS_MATRIXFS_H
4
5#include <assert.h>
7
8
9namespace sigraph
10{
11
16{
17 public:
18 MatrixDimReductor(std::vector<float> &matrix,
19 std::vector<int> &shape,
20 int selected);
21 MatrixDimReductor(const MatrixDimReductor &dimreductor);
23
24 virtual DimReductor* clone() const;
26
27 virtual const std::string typeName() const {
28 return( "matrix_dimreduction" ); }
29 virtual unsigned int reducedDim() const;
30 virtual void buildTree(Tree &tr) const;
31 virtual void transform(const std::vector<double> &src,
32 std::vector<double> &dst) const;
33
34
35 int getSelected(void) const;
36 const std::vector<int>& getShape(void) const;
37 const std::vector<float>& getMatrix(void) const;
38
39 protected:
40 std::vector<float> _matrix;
41 std::vector<int> _shape;
43 private:
44};
45
46// inline
48 (std::vector<float> &matrix, std::vector<int> &shape, int selected) :
49 _matrix(matrix), _shape(shape), _selected(selected) {}
50
52 (const MatrixDimReductor &dimreductor) : DimReductor(),
53 _matrix(dimreductor._matrix), _shape(dimreductor._shape),
54 _selected(dimreductor._selected) {}
55
57{
58 return (new MatrixDimReductor(*this));
59}
60
61inline MatrixDimReductor &
63{
64 if(this != &d)
65 {
67 _matrix = d._matrix;
68 _shape = d._shape;
70 }
71 return (*this);
72}
73
74inline int MatrixDimReductor::getSelected(void) const { return _selected; }
75
76inline const std::vector<int>& MatrixDimReductor::getShape(void) const
77{ return _shape; }
78
79
80inline const std::vector<float>& MatrixDimReductor::getMatrix(void) const
81{ return _matrix; }
82
83
84inline unsigned int MatrixDimReductor::reducedDim() const
85{
86 return (unsigned int ) _selected;
87}
88
89
90inline void MatrixDimReductor::transform(const std::vector<double> &src,
91 std::vector<double> &dst) const
92{
93 assert(src.size() == (unsigned int) _shape[1]);
94 assert(dst.size() == (unsigned int) _selected);
95
96 unsigned int i, j, s = src.size();
97 //dst = _matrix * src with troncated output according to selected value.
98 for (i = 0; i < (unsigned int) _selected; ++i)
99 {
100 dst[i] = 0.;
101 for (j = 0; j < s; ++j)
102 dst[i] += _matrix[i * _shape[1] + j] * src[j];
103 }
104}
105}
106
107#endif
108
DimReductor & operator=(const DimReductor &)
Definition dimreductor.h:46
Matrix Dimension Reductor (for instance svd)
virtual DimReductor * clone() const
std::vector< float > _matrix
virtual unsigned int reducedDim() const
const std::vector< float > & getMatrix(void) const
MatrixDimReductor & operator=(const MatrixDimReductor &dimreductor)
virtual void transform(const std::vector< double > &src, std::vector< double > &dst) const
MatrixDimReductor(std::vector< float > &matrix, std::vector< int > &shape, int selected)
virtual void buildTree(Tree &tr) const
virtual const std::string typeName() const
const std::vector< int > & getShape(void) const