KrisLibrary  1.0.0
stacking.h
1 #ifndef MATH_STACKING_H
2 #define MATH_STACKING_H
3 
4 #include "VectorTemplate.h"
5 #include "MatrixTemplate.h"
6 #include <vector>
7 
8 namespace Math {
9 
15 template <class T>
16 void Stack(const std::vector<VectorTemplate<T> >& vs,VectorTemplate<T>& out)
17 {
18  int n=0;
19  for(size_t i=0;i<vs.size();i++) n += vs[i].n;
20  out.resize(n);
21  n=0;
22  for(size_t i=0;i<vs.size();i++) {
23  out.copySubVector(n,vs[i]);
24  n += vs[i].n;
25  }
26 }
27 
28 template <class T>
29 void Stack(const VectorTemplate<T>& v1,const VectorTemplate<T>& v2,VectorTemplate<T>& out)
30 {
31  out.resize(v1.n+v2.n);
32  out.copySubVector(0,v1);
33  out.copySubVector(v1.n,v2);
34 }
35 
36 
37 template <class T>
38 void HStack(const std::vector<VectorTemplate<T> >& vs,MatrixTemplate<T>& out)
39 {
40  Assert(!vs.empty());
41  for(size_t i=0;i<vs.size();i++) Assert(vs[i].n==vs[0].n);
42  out.resize(vs.size(),vs[0].n);
43  for(size_t i=0;i<vs.size();i++)
44  out.copyRow(i,vs[i]);
45 }
46 
47 template <class T>
48 void VStack(const std::vector<VectorTemplate<T> >& vs,MatrixTemplate<T>& out)
49 {
50  Assert(!vs.empty());
51  for(size_t i=0;i<vs.size();i++) Assert(vs[i].n==vs[0].n);
52  out.resize(vs[0].n,vs.size());
53  for(size_t i=0;i<vs.size();i++)
54  out.copyCol(i,vs[i]);
55 }
56 
57 template <class T>
58 void HStack(const MatrixTemplate<T>& v1,const MatrixTemplate<T>& v2,MatrixTemplate<T>& out)
59 {
60  Assert(v1.n == v2.n);
61  out.resize(v1.m+v2.m,v1.n);
62  out.copySubMatrix(0,0,v1);
63  out.copySubMatrix(v1.m,0,v2);
64 }
65 
66 template <class T>
67 void VStack(const MatrixTemplate<T>& v1,const MatrixTemplate<T>& v2,MatrixTemplate<T>& out)
68 {
69  Assert(v1.m == v2.m);
70  out.resize(v1.m,v1.n+v2.n);
71  out.copySubMatrix(0,0,v1);
72  out.copySubMatrix(0,v1.n,v2);
73 }
74 
75 } //namespace Math
76 
77 #endif
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12