• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1namespace Eigen {
2
3/** \eigenManualPage TutorialReshapeSlicing Reshape and Slicing
4
5%Eigen does not expose convenient methods to take slices or to reshape a matrix yet.
6Nonetheless, such features can easily be emulated using the Map class.
7
8\eigenAutoToc
9
10\section TutorialReshape Reshape
11
12A reshape operation consists in modifying the sizes of a matrix while keeping the same coefficients.
13Instead of modifying the input matrix itself, which is not possible for compile-time sizes, the approach consist in creating a different \em view on the storage using class Map.
14Here is a typical example creating a 1D linear view of a matrix:
15
16<table class="example">
17<tr><th>Example:</th><th>Output:</th></tr>
18<tr><td>
19\include Tutorial_ReshapeMat2Vec.cpp
20</td>
21<td>
22\verbinclude Tutorial_ReshapeMat2Vec.out
23</td></tr></table>
24
25Remark how the storage order of the input matrix modifies the order of the coefficients in the linear view.
26Here is another example reshaping a 2x6 matrix to a 6x2 one:
27<table class="example">
28<tr><th>Example:</th><th>Output:</th></tr>
29<tr><td>
30\include Tutorial_ReshapeMat2Mat.cpp
31</td>
32<td>
33\verbinclude Tutorial_ReshapeMat2Mat.out
34</td></tr></table>
35
36
37
38\section TutorialSlicing Slicing
39
40Slicing consists in taking a set of rows, columns, or elements, uniformly spaced within a matrix.
41Again, the class Map allows to easily mimic this feature.
42
43For instance, one can skip every P elements in a vector:
44<table class="example">
45<tr><th>Example:</th><th>Output:</th></tr>
46<tr><td>
47\include Tutorial_SlicingVec.cpp
48</td>
49<td>
50\verbinclude Tutorial_SlicingVec.out
51</td></tr></table>
52
53One can olso take one column over three using an adequate outer-stride or inner-stride depending on the actual storage order:
54<table class="example">
55<tr><th>Example:</th><th>Output:</th></tr>
56<tr><td>
57\include Tutorial_SlicingCol.cpp
58</td>
59<td>
60\verbinclude Tutorial_SlicingCol.out
61</td></tr></table>
62
63*/
64
65}
66