Chris@49
|
1 <!-- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -->
|
Chris@49
|
2 <html>
|
Chris@49
|
3 <head>
|
Chris@49
|
4 <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
|
Chris@49
|
5 <title>Armadillo: API Reference</title>
|
Chris@49
|
6 <link rel="icon" href="armadillo_icon.png" type="image/png">
|
Chris@49
|
7 <style type="text/css">
|
Chris@49
|
8 <!--
|
Chris@49
|
9 body
|
Chris@49
|
10 {
|
Chris@49
|
11 font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
|
Chris@49
|
12 color: #000000;
|
Chris@49
|
13 background-color: #FFFFFF;
|
Chris@49
|
14 /* font-size: 10pt; */
|
Chris@49
|
15 /* line-height: 120%; */
|
Chris@49
|
16 height: 110%;
|
Chris@49
|
17 }
|
Chris@49
|
18
|
Chris@49
|
19 pre
|
Chris@49
|
20 {
|
Chris@49
|
21 font-family: "DejaVu Sans Mono", "Liberation Mono", "Andale Mono", "Bitstream Vera Sans Mono", "Luxi Mono", monospace;
|
Chris@49
|
22 font-size: smaller;
|
Chris@49
|
23 color: #666666;
|
Chris@49
|
24 }
|
Chris@49
|
25
|
Chris@49
|
26 a
|
Chris@49
|
27 {
|
Chris@49
|
28 text-decoration: none;
|
Chris@49
|
29 color: #498c05;
|
Chris@49
|
30 }
|
Chris@49
|
31
|
Chris@49
|
32 a:hover
|
Chris@49
|
33 {
|
Chris@49
|
34 text-decoration: underline;
|
Chris@49
|
35 color: #498c05;
|
Chris@49
|
36 }
|
Chris@49
|
37
|
Chris@49
|
38 a.menu
|
Chris@49
|
39 {
|
Chris@49
|
40 text-decoration: none;
|
Chris@49
|
41 color: #CCCCCC;
|
Chris@49
|
42 }
|
Chris@49
|
43
|
Chris@49
|
44 a.menu:hover
|
Chris@49
|
45 {
|
Chris@49
|
46 text-decoration: none;
|
Chris@49
|
47 color: #498c05;
|
Chris@49
|
48 }
|
Chris@49
|
49
|
Chris@49
|
50 a.hidden, a.hidden:hover, a.hidden:active, a.hidden:link, a.hidden:visited
|
Chris@49
|
51 {
|
Chris@49
|
52 text-decoration: none;
|
Chris@49
|
53 border-bottom: 0px
|
Chris@49
|
54 }
|
Chris@49
|
55
|
Chris@49
|
56 table
|
Chris@49
|
57 {
|
Chris@49
|
58 /* border: 1px solid #000; */
|
Chris@49
|
59 /* display: block; */
|
Chris@49
|
60 border-collapse: collapse;
|
Chris@49
|
61 }
|
Chris@49
|
62
|
Chris@49
|
63 td.line
|
Chris@49
|
64 {
|
Chris@49
|
65 border-left: 2px solid rgb(204, 204, 204);
|
Chris@49
|
66 }
|
Chris@49
|
67
|
Chris@49
|
68 .footertext
|
Chris@49
|
69 {
|
Chris@49
|
70 position: relative;
|
Chris@49
|
71 bottom: 0px;
|
Chris@49
|
72 }
|
Chris@49
|
73
|
Chris@49
|
74 hr.greyline
|
Chris@49
|
75 {
|
Chris@49
|
76 color: rgb(204, 204, 204);
|
Chris@49
|
77 /* background-color: rgb(204, 204, 204); */
|
Chris@49
|
78 }
|
Chris@49
|
79
|
Chris@49
|
80
|
Chris@49
|
81 #nobreak
|
Chris@49
|
82 {
|
Chris@49
|
83 white-space: nowrap;
|
Chris@49
|
84 }
|
Chris@49
|
85
|
Chris@49
|
86 .noindent
|
Chris@49
|
87 {
|
Chris@49
|
88 text-indent: 0px;
|
Chris@49
|
89 margin-left: 1ex;
|
Chris@49
|
90 margin-right: 0ex;
|
Chris@49
|
91 margin-top: 0ex;
|
Chris@49
|
92 margin-bottom: 0ex;
|
Chris@49
|
93 padding-left: 1ex;
|
Chris@49
|
94 padding-right: 0ex;
|
Chris@49
|
95 padding-top: 0ex;
|
Chris@49
|
96 padding-bottom: 0ex;
|
Chris@49
|
97 list-style: disc;
|
Chris@49
|
98 }
|
Chris@49
|
99 -->
|
Chris@49
|
100 </style>
|
Chris@49
|
101 </head>
|
Chris@49
|
102 <body>
|
Chris@49
|
103 <center>
|
Chris@49
|
104 <table style="text-align: left; width: 80%; margin-left: auto; margin-right: auto;" border="0" cellpadding="0" cellspacing="0">
|
Chris@49
|
105 <tbody>
|
Chris@49
|
106 <tr>
|
Chris@49
|
107 <td style="vertical-align: top;">
|
Chris@49
|
108
|
Chris@49
|
109 <table style="text-align: left; width: 100%;" border="0" cellpadding="0" cellspacing="0">
|
Chris@49
|
110 <tbody>
|
Chris@49
|
111 <tr>
|
Chris@49
|
112 <td style="text-align: left; vertical-align: top;">
|
Chris@49
|
113 <font size=+2><b>Reference for Armadillo 3.900</b></font>
|
Chris@49
|
114 <br>
|
Chris@49
|
115 <b>(Bavarian Sunflower)</b>
|
Chris@49
|
116 </td>
|
Chris@49
|
117 <td style="text-align: right; vertical-align: top;">
|
Chris@49
|
118 <b><a href="http://arma.sourceforge.net">to Armadillo home page</a></b>
|
Chris@49
|
119 <br>
|
Chris@49
|
120 <b><a href="http://nicta.com.au">to NICTA home page</a></b>
|
Chris@49
|
121 <br>
|
Chris@49
|
122 </td>
|
Chris@49
|
123 </tr>
|
Chris@49
|
124 </tbody>
|
Chris@49
|
125 </table>
|
Chris@49
|
126 <hr>
|
Chris@49
|
127 <br>
|
Chris@49
|
128 <br>
|
Chris@49
|
129 <a name="top"></a>
|
Chris@49
|
130 <a style="display:scroll; position:fixed; bottom:5px; right:5px;" href="#top"><font size=-1>[top]</font></a>
|
Chris@49
|
131
|
Chris@49
|
132
|
Chris@49
|
133 <!-- BEGIN CONTENT -->
|
Chris@49
|
134
|
Chris@49
|
135
|
Chris@49
|
136 <b>Preamble</b>
|
Chris@49
|
137 <br>
|
Chris@49
|
138 <br>
|
Chris@49
|
139 <table border="0" cellpadding="0" cellspacing="0">
|
Chris@49
|
140 <tbody>
|
Chris@49
|
141 <tr>
|
Chris@49
|
142 <td style="text-align: left; vertical-align: top; width: 50%;">
|
Chris@49
|
143 <ul>
|
Chris@49
|
144 <li>
|
Chris@49
|
145 To aid the conversion of Matlab/Octave programs,
|
Chris@49
|
146 there is a <a href="#syntax">syntax conversion table</a>
|
Chris@49
|
147 </li>
|
Chris@49
|
148 <br>
|
Chris@49
|
149 <li>
|
Chris@49
|
150 First time users may want to have a look at a short <a href="#example_prog">example program</a>
|
Chris@49
|
151 </li>
|
Chris@49
|
152 <br>
|
Chris@49
|
153 <li>
|
Chris@49
|
154 If you find any bugs or regressions, please <a href="http://arma.sourceforge.net/faq.html">report them</a>
|
Chris@49
|
155 </li>
|
Chris@49
|
156 <br>
|
Chris@49
|
157 <li>
|
Chris@49
|
158 Notes on <a href="#api_additions">API additions</a>
|
Chris@49
|
159 </li>
|
Chris@49
|
160 </ul>
|
Chris@49
|
161 </td>
|
Chris@49
|
162 <td>
|
Chris@49
|
163
|
Chris@49
|
164 </td>
|
Chris@49
|
165 <td class="line" style="vertical-align: top;">
|
Chris@49
|
166 <br>
|
Chris@49
|
167 </td>
|
Chris@49
|
168 <td style="text-align: left; vertical-align: top; width: 45%;">
|
Chris@49
|
169 <ul>
|
Chris@49
|
170 <li>
|
Chris@49
|
171 Please cite the following tech report if you use Armadillo in your research and/or software.
|
Chris@49
|
172 Citations are useful for the continued development and maintenance of the library.
|
Chris@49
|
173 <br>
|
Chris@49
|
174 <br>
|
Chris@49
|
175 <font size=-1>
|
Chris@49
|
176 Conrad Sanderson.
|
Chris@49
|
177 <br>
|
Chris@49
|
178 <i><a href="armadillo_nicta_2010.pdf">Armadillo: An Open Source C++ Linear Algebra Library for Fast Prototyping and Computationally Intensive Experiments</a></i>.
|
Chris@49
|
179 <br>
|
Chris@49
|
180 Technical Report, NICTA, 2010.
|
Chris@49
|
181 </font>
|
Chris@49
|
182 </li>
|
Chris@49
|
183 </ul>
|
Chris@49
|
184 </td>
|
Chris@49
|
185 </tr>
|
Chris@49
|
186 </tbody>
|
Chris@49
|
187 </table>
|
Chris@49
|
188
|
Chris@49
|
189 <br>
|
Chris@49
|
190 <br>
|
Chris@49
|
191
|
Chris@49
|
192 <b>Matrix, Vector, Cube and Field Classes</b>
|
Chris@49
|
193 <ul>
|
Chris@49
|
194 <a href="#Mat">Mat<<i>type</i>>, mat and cx_mat</a> ·
|
Chris@49
|
195 <a href="#Col">Col<<i>type</i>>, colvec and vec</a> ·
|
Chris@49
|
196 <a href="#Row">Row<<i>type</i>>, rowvec</a> ·
|
Chris@49
|
197 <a href="#Cube">Cube<<i>type</i>>, cube</a> ·
|
Chris@49
|
198 <a href="#field">field<<i>object type</i>></a> ·
|
Chris@49
|
199 <a href="#SpMat">SpMat<<i>type</i>>, sp_mat and sp_cx_mat</a>
|
Chris@49
|
200 </ul>
|
Chris@49
|
201 <br>
|
Chris@49
|
202
|
Chris@49
|
203 <b>Member Functions & Variables</b>
|
Chris@49
|
204 <ul>
|
Chris@49
|
205 <a href="#attributes">attributes</a> ·
|
Chris@49
|
206 <a href="#colptr">colptr</a> ·
|
Chris@49
|
207 <a href="#copy_size">copy_size</a> ·
|
Chris@49
|
208 <a href="#diag">diag</a> ·
|
Chris@49
|
209 <a href="#each_colrow">each_col/each_row</a> ·
|
Chris@49
|
210 <a href="#element_access">element access</a> ·
|
Chris@49
|
211 <a href="#element_initialisation">element initialisation</a> ·
|
Chris@49
|
212 <a href="#eval_member">eval</a> ·
|
Chris@49
|
213 <a href="#eye_member">eye</a> ·
|
Chris@49
|
214 <a href="#fill">fill</a> ·
|
Chris@49
|
215 <a href="#i_member">i (inverse)</a> ·
|
Chris@49
|
216 <a href="#imbue">imbue</a> ·
|
Chris@49
|
217 <a href="#insert">insert rows/cols/slices</a> ·
|
Chris@49
|
218 <a href="#in_range">in_range</a> ·
|
Chris@49
|
219 <a href="#is_empty">is_empty</a> ·
|
Chris@49
|
220 <a href="#is_finite">is_finite</a> ·
|
Chris@49
|
221 <a href="#is_square">is_square</a> ·
|
Chris@49
|
222 <a href="#is_vec">is_vec</a> ·
|
Chris@49
|
223 <a href="#iterators_mat">iterators (matrices)</a> ·
|
Chris@49
|
224 <a href="#iterators_cube">iterators (cubes)</a> ·
|
Chris@49
|
225 <a href="#memptr">memptr</a> ·
|
Chris@49
|
226 <a href="#min_and_max_member">min/max</a> ·
|
Chris@49
|
227 <a href="#ones_member">ones</a> ·
|
Chris@49
|
228 <a href="#operators">operators</a> ·
|
Chris@49
|
229 <a href="#print">print</a> ·
|
Chris@49
|
230 <a href="#raw_print">raw_print</a> ·
|
Chris@49
|
231 <a href="#randu_randn_member">randu/randn</a> ·
|
Chris@49
|
232 <a href="#reset">reset</a> ·
|
Chris@49
|
233 <a href="#reshape_member">reshape</a> ·
|
Chris@49
|
234 <a href="#resize_member">resize</a> ·
|
Chris@49
|
235 <a href="#save_load_mat">save/load (matrices & cubes)</a> ·
|
Chris@49
|
236 <a href="#save_load_field">save/load (fields)</a> ·
|
Chris@49
|
237 <a href="#set_imag">set_imag/real</a> ·
|
Chris@49
|
238 <a href="#set_size">set_size</a> ·
|
Chris@49
|
239 <a href="#shed">shed rows/cols/slices</a> ·
|
Chris@49
|
240 <a href="#stl_container_fns">STL container functions</a> ·
|
Chris@49
|
241 <a href="#submat">submatrix views</a> ·
|
Chris@49
|
242 <a href="#subcube">subcube views</a> ·
|
Chris@49
|
243 <a href="#subfield">subfield views</a> ·
|
Chris@49
|
244 <a href="#swap">swap</a> ·
|
Chris@49
|
245 <a href="#swap_rows">swap_rows/cols</a> ·
|
Chris@49
|
246 <a href="#t_st_members">t/st (transpose)</a> ·
|
Chris@49
|
247 <a href="#transform">transform</a> ·
|
Chris@49
|
248 <a href="#zeros_member">zeros</a>
|
Chris@49
|
249 </ul>
|
Chris@49
|
250 <br>
|
Chris@49
|
251
|
Chris@49
|
252 <b>Other Classes</b>
|
Chris@49
|
253 <ul>
|
Chris@49
|
254 <a href="#running_stat">running_stat<<i>type</i>></a> ·
|
Chris@49
|
255 <a href="#running_stat_vec">running_stat_vec<<i>type</i>></a> ·
|
Chris@49
|
256 <a href="#wall_clock">wall_clock</a>
|
Chris@49
|
257 </ul>
|
Chris@49
|
258 <br>
|
Chris@49
|
259
|
Chris@49
|
260 <b>Generated Vectors/Matrices/Cubes</b>
|
Chris@49
|
261 <ul>
|
Chris@49
|
262 <a href="#eye_standalone">eye</a> ·
|
Chris@49
|
263 <a href="#linspace">linspace</a> ·
|
Chris@49
|
264 <a href="#ones_standalone">ones</a> ·
|
Chris@49
|
265 <a href="#randu_randn_standalone">randu/randn</a> ·
|
Chris@49
|
266 <a href="#repmat">repmat</a> ·
|
Chris@49
|
267 <a href="#speye">speye</a> ·
|
Chris@49
|
268 <a href="#sprandu_sprandn">sprandu/sprandn</a> ·
|
Chris@49
|
269 <a href="#toeplitz">toeplitz/circ_toeplitz</a> ·
|
Chris@49
|
270 <a href="#zeros_standalone">zeros</a>
|
Chris@49
|
271 </ul>
|
Chris@49
|
272 <br>
|
Chris@49
|
273
|
Chris@49
|
274 <b>Functions Individually Applied to Each Element of a Matrix/Cube</b>
|
Chris@49
|
275 <ul>
|
Chris@49
|
276 <a href="#abs">abs</a> ·
|
Chris@49
|
277 <a href="#eps">eps</a> ·
|
Chris@49
|
278 <a href="#misc_fns">misc functions (exp, log, pow, sqrt, ...)</a> ·
|
Chris@49
|
279 <a href="#trig_fns">trigonometric functions (cos, sin, ...)</a>
|
Chris@49
|
280 </ul>
|
Chris@49
|
281 <br>
|
Chris@49
|
282
|
Chris@49
|
283 <b>Scalar Valued Functions of Vectors/Matrices/Cubes</b>
|
Chris@49
|
284 <ul>
|
Chris@49
|
285 <a href="#accu">accu</a> ·
|
Chris@49
|
286 <a href="#as_scalar">as_scalar</a> ·
|
Chris@49
|
287 <a href="#det">det</a> ·
|
Chris@49
|
288 <a href="#dot">dot/cdot/norm_dot</a> ·
|
Chris@49
|
289 <a href="#log_det">log_det</a> ·
|
Chris@49
|
290 <a href="#norm">norm</a> ·
|
Chris@49
|
291 <a href="#rank">rank</a> ·
|
Chris@49
|
292 <a href="#trace">trace</a>
|
Chris@49
|
293 </ul>
|
Chris@49
|
294 <br>
|
Chris@49
|
295
|
Chris@49
|
296 <b>Scalar/Vector Valued Functions of Vectors/Matrices</b>
|
Chris@49
|
297 <ul>
|
Chris@49
|
298 <a href="#diagvec">diagvec</a> ·
|
Chris@49
|
299 <a href="#min_and_max">min/max</a> ·
|
Chris@49
|
300 <a href="#prod">prod</a> ·
|
Chris@49
|
301 <a href="#sum">sum</a> ·
|
Chris@49
|
302 <a href="#stats_fns">statistics (mean, stddev, ...)</a>
|
Chris@49
|
303 </ul>
|
Chris@49
|
304 <br>
|
Chris@49
|
305
|
Chris@49
|
306 <b>Vector/Matrix/Cube Valued Functions of Vectors/Matrices/Cubes</b>
|
Chris@49
|
307 <ul>
|
Chris@49
|
308 <a href="#conv">conv</a> ·
|
Chris@49
|
309 <a href="#conv_to">conv_to</a> ·
|
Chris@49
|
310 <a href="#conj">conj</a> ·
|
Chris@49
|
311 <a href="#cor">cor</a> ·
|
Chris@49
|
312 <a href="#cov">cov</a> ·
|
Chris@49
|
313 <a href="#cross">cross</a> ·
|
Chris@49
|
314 <a href="#cumsum">cumsum</a> ·
|
Chris@49
|
315 <a href="#diagmat">diagmat</a> ·
|
Chris@49
|
316 <a href="#find">find</a> ·
|
Chris@49
|
317 <a href="#flip">fliplr/flipud</a> ·
|
Chris@49
|
318 <a href="#hist">hist</a> ·
|
Chris@49
|
319 <a href="#histc">histc</a> ·
|
Chris@49
|
320 <a href="#imag_real">imag/real</a> ·
|
Chris@49
|
321 <a href="#join">join rows/cols/slices</a> ·
|
Chris@49
|
322 <a href="#kron">kron</a> ·
|
Chris@49
|
323 <a href="#reshape">reshape</a> ·
|
Chris@49
|
324 <a href="#resize">resize</a> ·
|
Chris@49
|
325 <a href="#shuffle">shuffle</a> ·
|
Chris@49
|
326 <a href="#sort">sort</a> ·
|
Chris@49
|
327 <a href="#sort_index">sort_index</a> ·
|
Chris@49
|
328 <a href="#symmat">symmatu/symmatl</a> ·
|
Chris@49
|
329 <a href="#strans">strans</a> ·
|
Chris@49
|
330 <a href="#trans">trans</a> ·
|
Chris@49
|
331 <a href="#trimat">trimatu/trimatl</a> ·
|
Chris@49
|
332 <a href="#unique">unique</a>
|
Chris@49
|
333 </ul>
|
Chris@49
|
334 <br>
|
Chris@49
|
335
|
Chris@49
|
336 <b>Decompositions, Factorisations, Inverses and Equation Solvers</b>
|
Chris@49
|
337 <ul>
|
Chris@49
|
338 <a href="#chol">chol</a> ·
|
Chris@49
|
339 <a href="#eig_sym">eig_sym</a> ·
|
Chris@49
|
340 <a href="#eig_gen">eig_gen</a> ·
|
Chris@49
|
341 <a href="#fft">fft/ifft</a> ·
|
Chris@49
|
342 <a href="#inv">inv</a> ·
|
Chris@49
|
343 <a href="#lu">lu</a> ·
|
Chris@49
|
344 <a href="#pinv">pinv</a> ·
|
Chris@49
|
345 <a href="#princomp">princomp</a> ·
|
Chris@49
|
346 <a href="#qr">qr</a> ·
|
Chris@49
|
347 <a href="#qr_econ">qr_econ</a> ·
|
Chris@49
|
348 <a href="#solve">solve</a> ·
|
Chris@49
|
349 <a href="#svd">svd</a> ·
|
Chris@49
|
350 <a href="#svd_econ">svd_econ</a> ·
|
Chris@49
|
351 <a href="#syl">syl</a>
|
Chris@49
|
352 </ul>
|
Chris@49
|
353 <br>
|
Chris@49
|
354
|
Chris@49
|
355 <b>Miscellaneous</b>
|
Chris@49
|
356 <ul>
|
Chris@49
|
357 <a href="#is_finite_standalone">is_finite()</a> ·
|
Chris@49
|
358 <a href="#logging">logging of errors/warnings</a> ·
|
Chris@49
|
359 <a href="#constants">various constants (pi, inf, speed of light, ...)</a> ·
|
Chris@49
|
360 <!--<a href="#log_add">log_add</a> ·-->
|
Chris@49
|
361 <a href="#uword">uword/sword</a> ·
|
Chris@49
|
362 <a href="#cx_float_double">cx_float/cx_double</a> ·
|
Chris@49
|
363 <a href="#syntax">Matlab/Armadillo syntax differences</a> ·
|
Chris@49
|
364 <a href="#example_prog">example program</a> ·
|
Chris@49
|
365 <!--<a href="#catching_exceptions">catching exceptions</a> ·-->
|
Chris@49
|
366 <a href="#config_hpp">config.hpp</a> ·
|
Chris@49
|
367 <a href="#api_additions">API additions</a>
|
Chris@49
|
368 </ul>
|
Chris@49
|
369 <br>
|
Chris@49
|
370
|
Chris@49
|
371 <br>
|
Chris@49
|
372 <br>
|
Chris@49
|
373 <hr class="greyline">
|
Chris@49
|
374 <hr class="greyline">
|
Chris@49
|
375 <br>
|
Chris@49
|
376 <br>
|
Chris@49
|
377 <font size=+1><b>Matrix, Vector, Cube and Field Classes</b></font>
|
Chris@49
|
378 <br>
|
Chris@49
|
379 <br>
|
Chris@49
|
380 <hr class="greyline">
|
Chris@49
|
381 <br>
|
Chris@49
|
382
|
Chris@49
|
383 <a name="Mat"></a><b>Mat<</b><i>type</i><b>></b>
|
Chris@49
|
384 <br><b>mat</b>
|
Chris@49
|
385 <br><b>cx_mat</b>
|
Chris@49
|
386 <ul>
|
Chris@49
|
387 <li>
|
Chris@49
|
388 The root matrix class is <b>Mat<</b><i>type</i><b>></b>, where <i>type</i> can be one of:
|
Chris@49
|
389 <ul>
|
Chris@49
|
390 <li>
|
Chris@49
|
391 <i>float</i>, <i>double</i>, <i>std::complex<float></i>, <i>std::complex<double></i>,
|
Chris@49
|
392 <i>char</i>, <i>short</i>, <i>int</i>, and unsigned versions of <i>char</i>, <i>short</i>, <i>int</i>.
|
Chris@49
|
393 </li>
|
Chris@49
|
394 </ul>
|
Chris@49
|
395 </li>
|
Chris@49
|
396 <br>
|
Chris@49
|
397 <li>
|
Chris@49
|
398 For convenience the following typedefs have been defined:
|
Chris@49
|
399 <ul>
|
Chris@49
|
400 <table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
401 <tbody>
|
Chris@49
|
402 <tr>
|
Chris@49
|
403 <td style="vertical-align: top;">
|
Chris@49
|
404 mat
|
Chris@49
|
405 </td>
|
Chris@49
|
406 <td style="vertical-align: top;">
|
Chris@49
|
407 =
|
Chris@49
|
408 </td>
|
Chris@49
|
409 <td style="vertical-align: top;">
|
Chris@49
|
410 Mat<double>
|
Chris@49
|
411 </td>
|
Chris@49
|
412 </tr>
|
Chris@49
|
413 <tr>
|
Chris@49
|
414 <td style="vertical-align: top;">
|
Chris@49
|
415 fmat
|
Chris@49
|
416 </td>
|
Chris@49
|
417 <td style="vertical-align: top;">
|
Chris@49
|
418 =
|
Chris@49
|
419 </td>
|
Chris@49
|
420 <td style="vertical-align: top;">
|
Chris@49
|
421 Mat<float>
|
Chris@49
|
422 </td>
|
Chris@49
|
423 </tr>
|
Chris@49
|
424 <tr>
|
Chris@49
|
425 <td style="vertical-align: top;">
|
Chris@49
|
426 cx_mat
|
Chris@49
|
427 </td>
|
Chris@49
|
428 <td style="vertical-align: top;">
|
Chris@49
|
429 =
|
Chris@49
|
430 </td>
|
Chris@49
|
431 <td style="vertical-align: top;">
|
Chris@49
|
432 Mat<<a href="#cx_float_double">cx_double</a>>
|
Chris@49
|
433 </td>
|
Chris@49
|
434 </tr>
|
Chris@49
|
435 <tr>
|
Chris@49
|
436 <td style="vertical-align: top;">
|
Chris@49
|
437 cx_fmat
|
Chris@49
|
438 </td>
|
Chris@49
|
439 <td style="vertical-align: top;">
|
Chris@49
|
440 =
|
Chris@49
|
441 </td>
|
Chris@49
|
442 <td style="vertical-align: top;">
|
Chris@49
|
443 Mat<<a href="#cx_float_double">cx_float</a>>
|
Chris@49
|
444 </td>
|
Chris@49
|
445 </tr>
|
Chris@49
|
446 <tr>
|
Chris@49
|
447 <td style="vertical-align: top;">
|
Chris@49
|
448 umat
|
Chris@49
|
449 </td>
|
Chris@49
|
450 <td style="vertical-align: top;">
|
Chris@49
|
451 =
|
Chris@49
|
452 </td>
|
Chris@49
|
453 <td style="vertical-align: top;">
|
Chris@49
|
454 Mat<<a href="#uword">uword</a>>
|
Chris@49
|
455 </td>
|
Chris@49
|
456 </tr>
|
Chris@49
|
457 <tr>
|
Chris@49
|
458 <td style="vertical-align: top;">
|
Chris@49
|
459 imat
|
Chris@49
|
460 </td>
|
Chris@49
|
461 <td style="vertical-align: top;">
|
Chris@49
|
462 =
|
Chris@49
|
463 </td>
|
Chris@49
|
464 <td style="vertical-align: top;">
|
Chris@49
|
465 Mat<<a href="#uword">sword</a>>
|
Chris@49
|
466 </td>
|
Chris@49
|
467 </tr>
|
Chris@49
|
468 </tbody>
|
Chris@49
|
469 </table>
|
Chris@49
|
470 </ul>
|
Chris@49
|
471 </li>
|
Chris@49
|
472 <br>
|
Chris@49
|
473 <li>
|
Chris@49
|
474 In this documentation the <i>mat</i> type is used for convenience;
|
Chris@49
|
475 it is possible to use other types instead, eg. <i>fmat</i>
|
Chris@49
|
476 </li>
|
Chris@49
|
477 <br>
|
Chris@49
|
478 <li>
|
Chris@49
|
479 Functions which are wrappers for LAPACK or ATLAS functions (generally matrix decompositions) are only valid for the following types:
|
Chris@49
|
480 <i>fmat</i>, <i>mat</i>, <i>cx_fmat</i>, <i>cx_mat</i>
|
Chris@49
|
481 </li>
|
Chris@49
|
482 <br>
|
Chris@49
|
483 <li>
|
Chris@49
|
484 Elements are stored with column-major ordering (ie. column by column)
|
Chris@49
|
485 </li>
|
Chris@49
|
486 <br>
|
Chris@49
|
487 <a name="constructors_mat"></a>
|
Chris@49
|
488 <li>
|
Chris@49
|
489 Constructors:
|
Chris@49
|
490 <ul>
|
Chris@49
|
491 <li>mat()</li>
|
Chris@49
|
492 <li>mat(n_rows, n_cols)</li>
|
Chris@49
|
493 <li>mat(mat)</li>
|
Chris@49
|
494 <li>mat(vec)</li>
|
Chris@49
|
495 <li>mat(rowvec)</li>
|
Chris@49
|
496 <li>mat(string)</li>
|
Chris@49
|
497 <li>mat(std::vector) (treated as a column vector)</li>
|
Chris@49
|
498 <li>mat(initialiser_list) (C++11 only)</li>
|
Chris@49
|
499 <li>cx_mat(mat,mat) (for constructing a complex matrix out of two real matrices)</li>
|
Chris@49
|
500 </ul>
|
Chris@49
|
501 </li>
|
Chris@49
|
502 <br>
|
Chris@49
|
503 <li>
|
Chris@49
|
504 The string format for the constructor is elements separated by spaces, and rows denoted by semicolons.
|
Chris@49
|
505 For example, the 2x2 identity matrix can be created using the format string <code>"1 0; 0 1"</code>.
|
Chris@49
|
506 While string based initialisation is compact,
|
Chris@49
|
507 directly <a href="#element_access">setting the elements</a>
|
Chris@49
|
508 or using <a href="#element_initialisation">element initialisation</a> is considerably faster.
|
Chris@49
|
509 </li>
|
Chris@49
|
510 <br>
|
Chris@49
|
511 <a name="adv_constructors_mat"></a>
|
Chris@49
|
512 <li>
|
Chris@49
|
513 Advanced constructors:
|
Chris@49
|
514 <br>
|
Chris@49
|
515 <br>
|
Chris@49
|
516 <ul>
|
Chris@49
|
517 <li>mat(aux_mem*, n_rows, n_cols, copy_aux_mem = true, strict = true)
|
Chris@49
|
518 <br>
|
Chris@49
|
519 <br>
|
Chris@49
|
520 <ul>
|
Chris@49
|
521 Create a matrix using data from writeable auxiliary memory.
|
Chris@49
|
522 By default the matrix allocates its own memory and copies data from the auxiliary memory (for safety).
|
Chris@49
|
523 However, if <i>copy_aux_mem</i> is set to <i>false</i>,
|
Chris@49
|
524 the matrix will instead directly use the auxiliary memory (ie. no copying).
|
Chris@49
|
525 This is faster, but can be dangerous unless you know what you're doing!
|
Chris@49
|
526 <br>
|
Chris@49
|
527 <br>
|
Chris@49
|
528 The <i>strict</i> variable comes into effect only if <i>copy_aux_mem</i> is set to <i>false</i>
|
Chris@49
|
529 (ie. the matrix is directly using auxiliary memory).
|
Chris@49
|
530 If <i>strict</i> is set to <i>true</i>,
|
Chris@49
|
531 the matrix will be bound to the auxiliary memory for its lifetime;
|
Chris@49
|
532 the number of elements in the matrix can't be changed (directly or indirectly).
|
Chris@49
|
533 If <i>strict</i> is set to <i>false</i>, the matrix will not be bound to the auxiliary memory for its lifetime,
|
Chris@49
|
534 ie., the size of the matrix can be changed.
|
Chris@49
|
535 If the requested number of elements is different to the size of the auxiliary memory,
|
Chris@49
|
536 new memory will be allocated and the auxiliary memory will no longer be used.
|
Chris@49
|
537 </ul>
|
Chris@49
|
538 </li>
|
Chris@49
|
539 <br>
|
Chris@49
|
540 <li>mat(const aux_mem*, n_rows, n_cols)
|
Chris@49
|
541 <br>
|
Chris@49
|
542 <br>
|
Chris@49
|
543 <ul>
|
Chris@49
|
544 Create a matrix by copying data from read-only auxiliary memory.
|
Chris@49
|
545 </ul>
|
Chris@49
|
546 </li>
|
Chris@49
|
547 <a name="adv_constructors_mat_fixed"></a>
|
Chris@49
|
548 <br>
|
Chris@49
|
549 <li>mat::fixed<n_rows, n_cols>
|
Chris@49
|
550 <br>
|
Chris@49
|
551 <br>
|
Chris@49
|
552 <ul>
|
Chris@49
|
553 Create a fixed size matrix, with the size specified via template arguments.
|
Chris@49
|
554 Memory for the matrix is allocated at compile time.
|
Chris@49
|
555 This is generally faster than dynamic memory allocation, but the size of the matrix can't be changed afterwards (directly or indirectly).
|
Chris@49
|
556 <br>
|
Chris@49
|
557 <br>
|
Chris@49
|
558 For convenience, there are several pre-defined typedefs for each matrix type
|
Chris@49
|
559 (where the types are: <i>umat</i>, <i>imat</i>, <i>fmat</i>, <i>mat</i>, <i>cx_fmat</i>, <i>cx_mat</i>).
|
Chris@49
|
560 The typedefs specify a square matrix size, ranging from 2x2 to 9x9.
|
Chris@49
|
561 The typedefs were defined by simply appending a two digit form of the size to the matrix type
|
Chris@49
|
562 -- for example, <i>mat33</i> is equivalent to <i>mat::fixed<3,3></i>,
|
Chris@49
|
563 while <i>cx_mat44</i> is equivalent to <i>cx_mat::fixed<4,4></i>.
|
Chris@49
|
564 </ul>
|
Chris@49
|
565 </li>
|
Chris@49
|
566 <br>
|
Chris@49
|
567 <li>mat::fixed<n_rows, n_cols>(const aux_mem*)
|
Chris@49
|
568 <br>
|
Chris@49
|
569 <br>
|
Chris@49
|
570 <ul>
|
Chris@49
|
571 Create a fixed size matrix, with the size specified via template arguments,
|
Chris@49
|
572 and copying data from auxiliary memory.
|
Chris@49
|
573 </ul>
|
Chris@49
|
574 </li>
|
Chris@49
|
575 </ul>
|
Chris@49
|
576 </li>
|
Chris@49
|
577 <br>
|
Chris@49
|
578 <br>
|
Chris@49
|
579 <li>
|
Chris@49
|
580 Examples:
|
Chris@49
|
581 <ul>
|
Chris@49
|
582 <pre>
|
Chris@49
|
583 mat A = randu<mat>(5,5);
|
Chris@49
|
584 double x = A(1,2);
|
Chris@49
|
585
|
Chris@49
|
586 mat B = A + A;
|
Chris@49
|
587 mat C = A * B;
|
Chris@49
|
588 mat D = A % B;
|
Chris@49
|
589
|
Chris@49
|
590 cx_mat X(A,B);
|
Chris@49
|
591
|
Chris@49
|
592 B.zeros();
|
Chris@49
|
593 B.set_size(10,10);
|
Chris@49
|
594 B.zeros(5,6);
|
Chris@49
|
595
|
Chris@49
|
596 //
|
Chris@49
|
597 // fixed size matrices:
|
Chris@49
|
598
|
Chris@49
|
599 mat::fixed<5,6> F;
|
Chris@49
|
600 F.ones();
|
Chris@49
|
601
|
Chris@49
|
602 mat44 G;
|
Chris@49
|
603 G.randn();
|
Chris@49
|
604
|
Chris@49
|
605 cout << mat22().randu() << endl;
|
Chris@49
|
606
|
Chris@49
|
607 //
|
Chris@49
|
608 // constructing matrices from
|
Chris@49
|
609 // auxiliary (external) memory:
|
Chris@49
|
610
|
Chris@49
|
611 double aux_mem[24];
|
Chris@49
|
612 mat H(aux_mem, 4, 6, false);
|
Chris@49
|
613 </pre>
|
Chris@49
|
614 </ul>
|
Chris@49
|
615 </li>
|
Chris@49
|
616 <br>
|
Chris@49
|
617 <li><b>Caveat:</b>
|
Chris@49
|
618 For mathematical correctness, scalars are treated as 1x1 matrices during initialisation.
|
Chris@49
|
619 As such, the code below <b>will not</b> generate a 5x5 matrix with every element equal to 123.0:
|
Chris@49
|
620 <ul>
|
Chris@49
|
621 <pre>
|
Chris@49
|
622 mat A(5,5); A = 123.0;
|
Chris@49
|
623 </pre>
|
Chris@49
|
624 </ul>
|
Chris@49
|
625 Use the following code instead:
|
Chris@49
|
626 <ul>
|
Chris@49
|
627 <pre>
|
Chris@49
|
628 mat A(5,5); A.fill(123.0);
|
Chris@49
|
629 </pre>
|
Chris@49
|
630 </ul>
|
Chris@49
|
631 <br>
|
Chris@49
|
632 <li>
|
Chris@49
|
633 See also:
|
Chris@49
|
634 <ul>
|
Chris@49
|
635 <li><a href="#attributes">matrix attributes</a></li>
|
Chris@49
|
636 <li><a href="#element_access">accessing elements</a></li>
|
Chris@49
|
637 <li><a href="#element_initialisation">initialising elements</a></li>
|
Chris@49
|
638 <li><a href="#operators">math & relational operators</a></li>
|
Chris@49
|
639 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
640 <li><a href="#save_load_mat">saving & loading matrices</a></li>
|
Chris@49
|
641 <li><a href="#print">printing matrices</a></li>
|
Chris@49
|
642 <li><a href="#iterators_mat">STL-style element iterators</a></li>
|
Chris@49
|
643 <li><a href="#eval_member">.eval()</a></li>
|
Chris@49
|
644 <li><a href="#conv_to">conv_to()</a> (convert between matrix types)</li>
|
Chris@49
|
645 <li><a href="http://www.cplusplus.com/doc/tutorial/other_data_types/">explanation of <i>typedef</i></a> (cplusplus.com)
|
Chris@49
|
646 <li><a href="#Col">Col class</a></li>
|
Chris@49
|
647 <li><a href="#Row">Row class</a></li>
|
Chris@49
|
648 <li><a href="#Cube">Cube class</a></li>
|
Chris@49
|
649 <li><a href="#SpMat">SpMat class</a> (sparse matrix)</li>
|
Chris@49
|
650 <li><a href="#config_hpp">config.hpp</a></li>
|
Chris@49
|
651 </ul>
|
Chris@49
|
652 </li>
|
Chris@49
|
653 <br>
|
Chris@49
|
654 </ul>
|
Chris@49
|
655 <hr class="greyline">
|
Chris@49
|
656 <br>
|
Chris@49
|
657
|
Chris@49
|
658 <a name="Col"></a><b>Col<</b><i>type</i><b>></b>
|
Chris@49
|
659 <br><b>colvec</b>
|
Chris@49
|
660 <br><b>vec</b>
|
Chris@49
|
661 <ul>
|
Chris@49
|
662 <li>
|
Chris@49
|
663 Classes for column vectors (matrices with one column)
|
Chris@49
|
664 </li>
|
Chris@49
|
665 <br>
|
Chris@49
|
666 <li>The <b>Col<</b><i>type</i><b>></b> class is derived from the <b>Mat<</b><i>type</i><b>></b> class
|
Chris@49
|
667 and inherits most of the member functions
|
Chris@49
|
668 </li>
|
Chris@49
|
669 <br>
|
Chris@49
|
670 <li>
|
Chris@49
|
671 For convenience the following typedefs have been defined:
|
Chris@49
|
672 <ul>
|
Chris@49
|
673 <table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
674 <tbody>
|
Chris@49
|
675 <tr>
|
Chris@49
|
676 <td style="vertical-align: top;">
|
Chris@49
|
677 vec, colvec
|
Chris@49
|
678 </td>
|
Chris@49
|
679 <td style="vertical-align: top;">
|
Chris@49
|
680 =
|
Chris@49
|
681 </td>
|
Chris@49
|
682 <td style="vertical-align: top;">
|
Chris@49
|
683 Col<double>
|
Chris@49
|
684 </td>
|
Chris@49
|
685 </tr>
|
Chris@49
|
686 <tr>
|
Chris@49
|
687 <td style="vertical-align: top;">
|
Chris@49
|
688 fvec, fcolvec
|
Chris@49
|
689 </td>
|
Chris@49
|
690 <td style="vertical-align: top;">
|
Chris@49
|
691 =
|
Chris@49
|
692 </td>
|
Chris@49
|
693 <td style="vertical-align: top;">
|
Chris@49
|
694 Col<float>
|
Chris@49
|
695 </td>
|
Chris@49
|
696 </tr>
|
Chris@49
|
697 <tr>
|
Chris@49
|
698 <td style="vertical-align: top;">
|
Chris@49
|
699 cx_vec, cx_colvec
|
Chris@49
|
700 </td>
|
Chris@49
|
701 <td style="vertical-align: top;">
|
Chris@49
|
702 =
|
Chris@49
|
703 </td>
|
Chris@49
|
704 <td style="vertical-align: top;">
|
Chris@49
|
705 Col<<a href="#cx_float_double">cx_double</a>>
|
Chris@49
|
706 </td>
|
Chris@49
|
707 </tr>
|
Chris@49
|
708 <tr>
|
Chris@49
|
709 <td style="vertical-align: top;">
|
Chris@49
|
710 cx_fvec, cx_fcolvec
|
Chris@49
|
711 </td>
|
Chris@49
|
712 <td style="vertical-align: top;">
|
Chris@49
|
713 =
|
Chris@49
|
714 </td>
|
Chris@49
|
715 <td style="vertical-align: top;">
|
Chris@49
|
716 Col<<a href="#cx_float_double">cx_float</a>>
|
Chris@49
|
717 </td>
|
Chris@49
|
718 </tr>
|
Chris@49
|
719 <tr>
|
Chris@49
|
720 <td style="vertical-align: top;">
|
Chris@49
|
721 uvec, ucolvec
|
Chris@49
|
722 </td>
|
Chris@49
|
723 <td style="vertical-align: top;">
|
Chris@49
|
724 =
|
Chris@49
|
725 </td>
|
Chris@49
|
726 <td style="vertical-align: top;">
|
Chris@49
|
727 Col<<a href="#uword">uword</a>>
|
Chris@49
|
728 </td>
|
Chris@49
|
729 </tr>
|
Chris@49
|
730 <tr>
|
Chris@49
|
731 <td style="vertical-align: top;">
|
Chris@49
|
732 ivec, icolvec
|
Chris@49
|
733 </td>
|
Chris@49
|
734 <td style="vertical-align: top;">
|
Chris@49
|
735 =
|
Chris@49
|
736 </td>
|
Chris@49
|
737 <td style="vertical-align: top;">
|
Chris@49
|
738 Col<<a href="#uword">sword</a>>
|
Chris@49
|
739 </td>
|
Chris@49
|
740 </tr>
|
Chris@49
|
741 </tbody>
|
Chris@49
|
742 </table>
|
Chris@49
|
743 </ul>
|
Chris@49
|
744 </li>
|
Chris@49
|
745 <br>
|
Chris@49
|
746 <li>
|
Chris@49
|
747 In this documentation, the <b><i>vec</i></b> and <b><i>colvec</i></b> types have the <b>same meaning</b> and are used <b>interchangeably</b>
|
Chris@49
|
748 </li>
|
Chris@49
|
749 <br>
|
Chris@49
|
750 <li>
|
Chris@49
|
751 In this documentation, the types <i>vec</i> or <i>colvec</i> are used for convenience; it is possible to use other types instead, eg. <i>fvec</i>, <i>fcolvec</i>
|
Chris@49
|
752 </li>
|
Chris@49
|
753 <br>
|
Chris@49
|
754 <li>
|
Chris@49
|
755 Functions which take <i>Mat</i> as input can generally also take <i>Col</i> as input.
|
Chris@49
|
756 Main exceptions are functions which require square matrices
|
Chris@49
|
757 </li>
|
Chris@49
|
758 <br>
|
Chris@49
|
759 <li>
|
Chris@49
|
760 Constructors
|
Chris@49
|
761 <ul>
|
Chris@49
|
762 <li>vec(n_elem=0)</li>
|
Chris@49
|
763 <li>vec(vec)</li>
|
Chris@49
|
764 <li>vec(mat) (a <i>std::logic_error</i> exception is thrown if the given matrix has more than one column)</li>
|
Chris@49
|
765 <li>vec(string) (elements separated by spaces)</li>
|
Chris@49
|
766 <li>vec(std::vector)</li>
|
Chris@49
|
767 <li>vec(initialiser_list) (C++11 only)</li>
|
Chris@49
|
768 </ul>
|
Chris@49
|
769 </li>
|
Chris@49
|
770 <br>
|
Chris@49
|
771 <a name="adv_constructors_col"></a>
|
Chris@49
|
772 <li>
|
Chris@49
|
773 Advanced constructors:
|
Chris@49
|
774 <br>
|
Chris@49
|
775 <br>
|
Chris@49
|
776 <ul>
|
Chris@49
|
777 <li>vec(aux_mem*, number_of_elements, copy_aux_mem = true, strict = true)
|
Chris@49
|
778 <br>
|
Chris@49
|
779 <br>
|
Chris@49
|
780 <ul>
|
Chris@49
|
781 Create a column vector using data from writeable auxiliary memory.
|
Chris@49
|
782 By default the vector allocates its own memory and copies data from the auxiliary memory (for safety).
|
Chris@49
|
783 However, if <i>copy_aux_mem</i> is set to <i>false</i>,
|
Chris@49
|
784 the vector will instead directly use the auxiliary memory (ie. no copying).
|
Chris@49
|
785 This is faster, but can be dangerous unless you know what you're doing!
|
Chris@49
|
786 <br>
|
Chris@49
|
787 <br>
|
Chris@49
|
788 The <i>strict</i> variable comes into effect only if <i>copy_aux_mem</i> is set to <i>false</i>
|
Chris@49
|
789 (ie. the vector is directly using auxiliary memory).
|
Chris@49
|
790 If <i>strict</i> is set to <i>true</i>,
|
Chris@49
|
791 the vector will be bound to the auxiliary memory for its lifetime;
|
Chris@49
|
792 the number of elements in the vector can't be changed (directly or indirectly).
|
Chris@49
|
793 If <i>strict</i> is set to <i>false</i>, the vector will not be bound to the auxiliary memory for its lifetime,
|
Chris@49
|
794 ie., the vector's size can be changed.
|
Chris@49
|
795 If the requested number of elements is different to the size of the auxiliary memory,
|
Chris@49
|
796 new memory will be allocated and the auxiliary memory will no longer be used.
|
Chris@49
|
797 </ul>
|
Chris@49
|
798 </li>
|
Chris@49
|
799 <br>
|
Chris@49
|
800 <li>vec(const aux_mem*, number_of_elements)
|
Chris@49
|
801 <br>
|
Chris@49
|
802 <br>
|
Chris@49
|
803 <ul>
|
Chris@49
|
804 Create a column vector by copying data from read-only auxiliary memory.
|
Chris@49
|
805 </ul>
|
Chris@49
|
806 </li>
|
Chris@49
|
807 <a name="adv_constructors_col_fixed"></a>
|
Chris@49
|
808 <br>
|
Chris@49
|
809 <li>vec::fixed<number_of_elements>
|
Chris@49
|
810 <br>
|
Chris@49
|
811 <br>
|
Chris@49
|
812 <ul>
|
Chris@49
|
813 Create a fixed size column vector, with the size specified via the template argument.
|
Chris@49
|
814 Memory for the vector is allocated at compile time.
|
Chris@49
|
815 This is generally faster than dynamic memory allocation, but the size of the vector can't be changed afterwards (directly or indirectly).
|
Chris@49
|
816 <br>
|
Chris@49
|
817 <br>
|
Chris@49
|
818 For convenience, there are several pre-defined typedefs for each vector type
|
Chris@49
|
819 (where the types are: <i>uvec</i>, <i>ivec</i>, <i>fvec</i>, <i>vec</i>, <i>cx_fvec</i>, <i>cx_vec</i> as well as the corresponding <i>colvec</i> versions).
|
Chris@49
|
820 The pre-defined typedefs specify vector sizes ranging from 2 to 9.
|
Chris@49
|
821 The typedefs were defined by simply appending a single digit form of the size to the vector type
|
Chris@49
|
822 -- for example, <i>vec3</i> is equivalent to <i>vec::fixed<3></i>,
|
Chris@49
|
823 while <i>cx_vec4</i> is equivalent to <i>cx_vec::fixed<4></i>.
|
Chris@49
|
824 </ul>
|
Chris@49
|
825 </li>
|
Chris@49
|
826 <br>
|
Chris@49
|
827 <li>vec::fixed<number_of_elements>(const aux_mem*)
|
Chris@49
|
828 <br>
|
Chris@49
|
829 <br>
|
Chris@49
|
830 <ul>
|
Chris@49
|
831 Create a fixed size column vector, with the size specified via the template argument,
|
Chris@49
|
832 and copying data from auxiliary memory.
|
Chris@49
|
833 </ul>
|
Chris@49
|
834 </li>
|
Chris@49
|
835 </ul>
|
Chris@49
|
836 </li>
|
Chris@49
|
837 <br>
|
Chris@49
|
838 <br>
|
Chris@49
|
839 <li>
|
Chris@49
|
840 Examples:
|
Chris@49
|
841 <ul>
|
Chris@49
|
842 <pre>
|
Chris@49
|
843 vec x(10);
|
Chris@49
|
844 vec y = zeros<vec>(10,1);
|
Chris@49
|
845
|
Chris@49
|
846 mat A = randu<mat>(10,10);
|
Chris@49
|
847 vec z = A.col(5); // extract a column vector
|
Chris@49
|
848 </pre>
|
Chris@49
|
849 </ul>
|
Chris@49
|
850 </li>
|
Chris@49
|
851 <br>
|
Chris@49
|
852 <li><b>Caveat:</b>
|
Chris@49
|
853 For mathematical correctness, scalars are treated as 1x1 matrices during initialisation.
|
Chris@49
|
854 As such, the code below <b>will not</b> generate a column vector with every element equal to 123.0:
|
Chris@49
|
855 <ul>
|
Chris@49
|
856 <pre>
|
Chris@49
|
857 vec a(5); a = 123.0;
|
Chris@49
|
858 </pre>
|
Chris@49
|
859 </ul>
|
Chris@49
|
860 Use the following code instead:
|
Chris@49
|
861 <ul>
|
Chris@49
|
862 <pre>
|
Chris@49
|
863 vec a(5); a.fill(123.0);
|
Chris@49
|
864 </pre>
|
Chris@49
|
865 </ul>
|
Chris@49
|
866 </li>
|
Chris@49
|
867 <br>
|
Chris@49
|
868 <li>See also:
|
Chris@49
|
869 <ul>
|
Chris@49
|
870 <li><a href="#Mat">Mat class</a></li>
|
Chris@49
|
871 <li><a href="#Row">Row class</a></li>
|
Chris@49
|
872 </ul>
|
Chris@49
|
873 </li>
|
Chris@49
|
874 <br>
|
Chris@49
|
875 </ul>
|
Chris@49
|
876 <hr class="greyline"><br>
|
Chris@49
|
877
|
Chris@49
|
878 <a name="Row"></a>
|
Chris@49
|
879 <b>Row<</b><i>type</i><b>></b>
|
Chris@49
|
880 <br><b>rowvec</b>
|
Chris@49
|
881 <ul>
|
Chris@49
|
882 <li>
|
Chris@49
|
883 Classes for row vectors (matrices with one row)
|
Chris@49
|
884 </li>
|
Chris@49
|
885 <br>
|
Chris@49
|
886 <li>The template <b>Row<</b><i>type</i><b>></b> class is derived from the <b>Mat<</b><i>type</i><b>></b> class
|
Chris@49
|
887 and inherits most of the member functions
|
Chris@49
|
888 </li>
|
Chris@49
|
889 <br>
|
Chris@49
|
890 <li>
|
Chris@49
|
891 For convenience the following typedefs have been defined:
|
Chris@49
|
892 <ul>
|
Chris@49
|
893 <table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
894 <tbody>
|
Chris@49
|
895 <tr>
|
Chris@49
|
896 <td style="vertical-align: top;">
|
Chris@49
|
897 rowvec
|
Chris@49
|
898 </td>
|
Chris@49
|
899 <td style="vertical-align: top;">
|
Chris@49
|
900 =
|
Chris@49
|
901 </td>
|
Chris@49
|
902 <td style="vertical-align: top;">
|
Chris@49
|
903 Row<double>
|
Chris@49
|
904 </td>
|
Chris@49
|
905 </tr>
|
Chris@49
|
906 <tr>
|
Chris@49
|
907 <td style="vertical-align: top;">
|
Chris@49
|
908 frowvec
|
Chris@49
|
909 </td>
|
Chris@49
|
910 <td style="vertical-align: top;">
|
Chris@49
|
911 =
|
Chris@49
|
912 </td>
|
Chris@49
|
913 <td style="vertical-align: top;">
|
Chris@49
|
914 Row<float>
|
Chris@49
|
915 </td>
|
Chris@49
|
916 </tr>
|
Chris@49
|
917 <tr>
|
Chris@49
|
918 <td style="vertical-align: top;">
|
Chris@49
|
919 cx_rowvec
|
Chris@49
|
920 </td>
|
Chris@49
|
921 <td style="vertical-align: top;">
|
Chris@49
|
922 =
|
Chris@49
|
923 </td>
|
Chris@49
|
924 <td style="vertical-align: top;">
|
Chris@49
|
925 Row<<a href="#cx_float_double">cx_double</a>>
|
Chris@49
|
926 </td>
|
Chris@49
|
927 </tr>
|
Chris@49
|
928 <tr>
|
Chris@49
|
929 <td style="vertical-align: top;">
|
Chris@49
|
930 cx_frowvec
|
Chris@49
|
931 </td>
|
Chris@49
|
932 <td style="vertical-align: top;">
|
Chris@49
|
933 =
|
Chris@49
|
934 </td>
|
Chris@49
|
935 <td style="vertical-align: top;">
|
Chris@49
|
936 Row<<a href="#cx_float_double">cx_float</a>>
|
Chris@49
|
937 </td>
|
Chris@49
|
938 </tr>
|
Chris@49
|
939 <tr>
|
Chris@49
|
940 <td style="vertical-align: top;">
|
Chris@49
|
941 urowvec
|
Chris@49
|
942 </td>
|
Chris@49
|
943 <td style="vertical-align: top;">
|
Chris@49
|
944 =
|
Chris@49
|
945 </td>
|
Chris@49
|
946 <td style="vertical-align: top;">
|
Chris@49
|
947 Row<<a href="#uword">uword</a>>
|
Chris@49
|
948 </td>
|
Chris@49
|
949 </tr>
|
Chris@49
|
950 <tr>
|
Chris@49
|
951 <td style="vertical-align: top;">
|
Chris@49
|
952 irowvec
|
Chris@49
|
953 </td>
|
Chris@49
|
954 <td style="vertical-align: top;">
|
Chris@49
|
955 =
|
Chris@49
|
956 </td>
|
Chris@49
|
957 <td style="vertical-align: top;">
|
Chris@49
|
958 Row<<a href="#uword">sword</a>>
|
Chris@49
|
959 </td>
|
Chris@49
|
960 </tr>
|
Chris@49
|
961 </tbody>
|
Chris@49
|
962 </table>
|
Chris@49
|
963 </ul>
|
Chris@49
|
964 </li>
|
Chris@49
|
965 <br>
|
Chris@49
|
966 <li>
|
Chris@49
|
967 In this documentation, the <i>rowvec</i> type is used for convenience;
|
Chris@49
|
968 it is possible to use other types instead, eg. <i>frowvec</i>
|
Chris@49
|
969 </li>
|
Chris@49
|
970 <br>
|
Chris@49
|
971 <li>
|
Chris@49
|
972 Functions which take <i>Mat</i> as input can generally also take <i>Row</i> as input.
|
Chris@49
|
973 Main exceptions are functions which require square matrices
|
Chris@49
|
974 </li>
|
Chris@49
|
975 <br>
|
Chris@49
|
976 <li>
|
Chris@49
|
977 Constructors
|
Chris@49
|
978 <ul>
|
Chris@49
|
979 <li>rowvec(n_elem=0)</li>
|
Chris@49
|
980 <li>rowvec(rowvec)</li>
|
Chris@49
|
981 <li>rowvec(mat) (a <i>std::logic_error</i> exception is thrown if the given matrix has more than one row)</li>
|
Chris@49
|
982 <li>rowvec(string) (elements separated by spaces)</li>
|
Chris@49
|
983 <li>rowvec(std::vector)</li>
|
Chris@49
|
984 <li>rowvec(initialiser_list) (C++11 only)</li>
|
Chris@49
|
985 </ul>
|
Chris@49
|
986 </li>
|
Chris@49
|
987 <br>
|
Chris@49
|
988 <a name="adv_constructors_row"></a>
|
Chris@49
|
989 <li>
|
Chris@49
|
990 Advanced constructors:
|
Chris@49
|
991 <br>
|
Chris@49
|
992 <br>
|
Chris@49
|
993 <ul>
|
Chris@49
|
994 <li>rowvec(aux_mem*, number_of_elements, copy_aux_mem = true, strict = true)
|
Chris@49
|
995 <br>
|
Chris@49
|
996 <br>
|
Chris@49
|
997 <ul>
|
Chris@49
|
998 Create a row vector using data from writeable auxiliary memory.
|
Chris@49
|
999 By default the vector allocates its own memory and copies data from the auxiliary memory (for safety).
|
Chris@49
|
1000 However, if <i>copy_aux_mem</i> is set to <i>false</i>,
|
Chris@49
|
1001 the vector will instead directly use the auxiliary memory (ie. no copying).
|
Chris@49
|
1002 This is faster, but can be dangerous unless you know what you're doing!
|
Chris@49
|
1003 <br>
|
Chris@49
|
1004 <br>
|
Chris@49
|
1005 The <i>strict</i> variable comes into effect only if <i>copy_aux_mem</i> is set to <i>false</i>
|
Chris@49
|
1006 (ie. the vector is directly using auxiliary memory).
|
Chris@49
|
1007 If <i>strict</i> is set to <i>true</i>,
|
Chris@49
|
1008 the vector will be bound to the auxiliary memory for its lifetime;
|
Chris@49
|
1009 the number of elements in the vector can't be changed (directly or indirectly).
|
Chris@49
|
1010 If <i>strict</i> is set to <i>false</i>, the vector will not be bound to the auxiliary memory for its lifetime,
|
Chris@49
|
1011 ie., the vector's size can be changed.
|
Chris@49
|
1012 If the requested number of elements is different to the size of the auxiliary memory,
|
Chris@49
|
1013 new memory will be allocated and the auxiliary memory will no longer be used.
|
Chris@49
|
1014 </ul>
|
Chris@49
|
1015 </li>
|
Chris@49
|
1016 <br>
|
Chris@49
|
1017 <li>rowvec(const aux_mem*, number_of_elements)
|
Chris@49
|
1018 <br>
|
Chris@49
|
1019 <br>
|
Chris@49
|
1020 <ul>
|
Chris@49
|
1021 Create a row vector by copying data from read-only auxiliary memory.
|
Chris@49
|
1022 </ul>
|
Chris@49
|
1023 </li>
|
Chris@49
|
1024 <br>
|
Chris@49
|
1025 <li>rowvec::fixed<number_of_elements>
|
Chris@49
|
1026 <br>
|
Chris@49
|
1027 <br>
|
Chris@49
|
1028 <ul>
|
Chris@49
|
1029 Create a fixed size row vector, with the size specified via the template argument.
|
Chris@49
|
1030 Memory for the vector is allocated at compile time.
|
Chris@49
|
1031 This is generally faster than dynamic memory allocation, but the size of the vector can't be changed afterwards (directly or indirectly).
|
Chris@49
|
1032 <br>
|
Chris@49
|
1033 <br>
|
Chris@49
|
1034 For convenience, there are several pre-defined typedefs for each vector type
|
Chris@49
|
1035 (where the types are: <i>urowvec</i>, <i>irowvec</i>, <i>frowvec</i>, <i>rowvec</i>, <i>cx_frowvec</i>, <i>cx_rowvec</i>).
|
Chris@49
|
1036 The pre-defined typedefs specify vector sizes ranging from 2 to 9.
|
Chris@49
|
1037 The typedefs were defined by simply appending a single digit form of the size to the vector type
|
Chris@49
|
1038 -- for example, <i>rowvec3</i> is equivalent to <i>rowvec::fixed<3></i>,
|
Chris@49
|
1039 while <i>cx_rowvec4</i> is equivalent to <i>cx_rowvec::fixed<4></i>.
|
Chris@49
|
1040 </ul>
|
Chris@49
|
1041 </li>
|
Chris@49
|
1042 <br>
|
Chris@49
|
1043 <li>rowvec::fixed<number_of_elements>(const aux_mem*)
|
Chris@49
|
1044 <br>
|
Chris@49
|
1045 <br>
|
Chris@49
|
1046 <ul>
|
Chris@49
|
1047 Create a fixed size row vector, with the size specified via the template argument,
|
Chris@49
|
1048 and copying data from auxiliary memory.
|
Chris@49
|
1049 </ul>
|
Chris@49
|
1050 </li>
|
Chris@49
|
1051 </ul>
|
Chris@49
|
1052 </li>
|
Chris@49
|
1053 <br>
|
Chris@49
|
1054 <br>
|
Chris@49
|
1055 <li>
|
Chris@49
|
1056 Examples:
|
Chris@49
|
1057 <ul>
|
Chris@49
|
1058 <pre>
|
Chris@49
|
1059 rowvec x(10);
|
Chris@49
|
1060 rowvec y = zeros<mat>(1,10);
|
Chris@49
|
1061
|
Chris@49
|
1062 mat A = randu<mat>(10,10);
|
Chris@49
|
1063 rowvec z = A.row(5); // extract a row vector
|
Chris@49
|
1064 </pre>
|
Chris@49
|
1065 </ul>
|
Chris@49
|
1066 </li>
|
Chris@49
|
1067 <br>
|
Chris@49
|
1068 <li>
|
Chris@49
|
1069 <b>Caveat:</b>
|
Chris@49
|
1070 For mathematical correctness, scalars are treated as 1x1 matrices during initialisation.
|
Chris@49
|
1071 As such, the code below <b>will not</b> generate a row vector with every element equal to 123.0:
|
Chris@49
|
1072 <ul>
|
Chris@49
|
1073 <pre>
|
Chris@49
|
1074 rowvec r(5); r = 123.0;
|
Chris@49
|
1075 </pre>
|
Chris@49
|
1076 </ul>
|
Chris@49
|
1077 Use the following code instead:
|
Chris@49
|
1078 <ul>
|
Chris@49
|
1079 <pre>
|
Chris@49
|
1080 rowvec r(5); r.fill(123.0);
|
Chris@49
|
1081 </pre>
|
Chris@49
|
1082 </ul>
|
Chris@49
|
1083 <br>
|
Chris@49
|
1084 <li>See also:
|
Chris@49
|
1085 <ul>
|
Chris@49
|
1086 <li><a href="#Mat">Mat class</a></li>
|
Chris@49
|
1087 <li><a href="#Col">Col class</a></li>
|
Chris@49
|
1088 </ul>
|
Chris@49
|
1089 </li>
|
Chris@49
|
1090 <br>
|
Chris@49
|
1091 </ul>
|
Chris@49
|
1092 <hr class="greyline">
|
Chris@49
|
1093 <br>
|
Chris@49
|
1094
|
Chris@49
|
1095 <a name="Cube"></a>
|
Chris@49
|
1096 <b>Cube<</b><i>type</i><b>></b>
|
Chris@49
|
1097 <br><b>cube</b>
|
Chris@49
|
1098 <br><b>cx_cube</b>
|
Chris@49
|
1099 <ul>
|
Chris@49
|
1100 <li>
|
Chris@49
|
1101 Classes for cubes, also known as "3D matrices" or 3rd order tensors
|
Chris@49
|
1102 </li>
|
Chris@49
|
1103 <br>
|
Chris@49
|
1104 <li>
|
Chris@49
|
1105 The cube class is <b>Cube<</b><i>type</i><b>></b>, where <i>type</i> can be one of:
|
Chris@49
|
1106 <i>char</i>, <i>int</i>, <i>float</i>, <i>double</i>, <i>std::complex<double></i>, etc
|
Chris@49
|
1107 </li>
|
Chris@49
|
1108 <br>
|
Chris@49
|
1109 <li>
|
Chris@49
|
1110 For convenience the following typedefs have been defined:
|
Chris@49
|
1111 <ul>
|
Chris@49
|
1112 <table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
1113 <tbody>
|
Chris@49
|
1114 <tr>
|
Chris@49
|
1115 <td style="vertical-align: top;">
|
Chris@49
|
1116 cube
|
Chris@49
|
1117 </td>
|
Chris@49
|
1118 <td style="vertical-align: top;">
|
Chris@49
|
1119 =
|
Chris@49
|
1120 </td>
|
Chris@49
|
1121 <td style="vertical-align: top;">
|
Chris@49
|
1122 Cube<double>
|
Chris@49
|
1123 </td>
|
Chris@49
|
1124 </tr>
|
Chris@49
|
1125 <tr>
|
Chris@49
|
1126 <td style="vertical-align: top;">
|
Chris@49
|
1127 fcube
|
Chris@49
|
1128 </td>
|
Chris@49
|
1129 <td style="vertical-align: top;">
|
Chris@49
|
1130 =
|
Chris@49
|
1131 </td>
|
Chris@49
|
1132 <td style="vertical-align: top;">
|
Chris@49
|
1133 Cube<float>
|
Chris@49
|
1134 </td>
|
Chris@49
|
1135 </tr>
|
Chris@49
|
1136 <tr>
|
Chris@49
|
1137 <td style="vertical-align: top;">
|
Chris@49
|
1138 cx_cube
|
Chris@49
|
1139 </td>
|
Chris@49
|
1140 <td style="vertical-align: top;">
|
Chris@49
|
1141 =
|
Chris@49
|
1142 </td>
|
Chris@49
|
1143 <td style="vertical-align: top;">
|
Chris@49
|
1144 Cube<<a href="#cx_float_double">cx_double</a>>
|
Chris@49
|
1145 </td>
|
Chris@49
|
1146 </tr>
|
Chris@49
|
1147 <tr>
|
Chris@49
|
1148 <td style="vertical-align: top;">
|
Chris@49
|
1149 cx_fcube
|
Chris@49
|
1150 </td>
|
Chris@49
|
1151 <td style="vertical-align: top;">
|
Chris@49
|
1152 =
|
Chris@49
|
1153 </td>
|
Chris@49
|
1154 <td style="vertical-align: top;">
|
Chris@49
|
1155 Cube<<a href="#cx_float_double">cx_float</a>>
|
Chris@49
|
1156 </td>
|
Chris@49
|
1157 </tr>
|
Chris@49
|
1158 <tr>
|
Chris@49
|
1159 <td style="vertical-align: top;">
|
Chris@49
|
1160 ucube
|
Chris@49
|
1161 </td>
|
Chris@49
|
1162 <td style="vertical-align: top;">
|
Chris@49
|
1163 =
|
Chris@49
|
1164 </td>
|
Chris@49
|
1165 <td style="vertical-align: top;">
|
Chris@49
|
1166 Cube<<a href="#uword">uword</a>>
|
Chris@49
|
1167 </td>
|
Chris@49
|
1168 </tr>
|
Chris@49
|
1169 <tr>
|
Chris@49
|
1170 <td style="vertical-align: top;">
|
Chris@49
|
1171 icube
|
Chris@49
|
1172 </td>
|
Chris@49
|
1173 <td style="vertical-align: top;">
|
Chris@49
|
1174 =
|
Chris@49
|
1175 </td>
|
Chris@49
|
1176 <td style="vertical-align: top;">
|
Chris@49
|
1177 Cube<<a href="#uword">sword</a>>
|
Chris@49
|
1178 </td>
|
Chris@49
|
1179 </tr>
|
Chris@49
|
1180 </tbody>
|
Chris@49
|
1181 </table>
|
Chris@49
|
1182 </ul>
|
Chris@49
|
1183 </li>
|
Chris@49
|
1184 <br>
|
Chris@49
|
1185 <li>
|
Chris@49
|
1186 In this documentation the <i>cube</i> type is used for convenience;
|
Chris@49
|
1187 it is possible to use other types instead, eg. <i>fcube</i>
|
Chris@49
|
1188 </li>
|
Chris@49
|
1189 <br>
|
Chris@49
|
1190 <li>
|
Chris@49
|
1191 Cube data is stored as a set of slices (matrices) stored contiguously within memory.
|
Chris@49
|
1192 Within each slice, elements are stored with column-major ordering (ie. column by column)
|
Chris@49
|
1193 </li>
|
Chris@49
|
1194 <br>
|
Chris@49
|
1195 <li>
|
Chris@49
|
1196 Each slice can be interpreted as a matrix, hence functions which take <i>Mat</i> as input can generally also take cube slices as input
|
Chris@49
|
1197 </li>
|
Chris@49
|
1198 <br>
|
Chris@49
|
1199 <a name="constructors_cube"></a>
|
Chris@49
|
1200 <li>
|
Chris@49
|
1201 Constructors:
|
Chris@49
|
1202 <ul>
|
Chris@49
|
1203 cube()
|
Chris@49
|
1204 <br>cube(cube)
|
Chris@49
|
1205 <br>cube(n_rows, n_cols, n_slices)
|
Chris@49
|
1206 <br>cx_cube(cube, cube) (for constructing a complex cube out of two real cubes)
|
Chris@49
|
1207 </ul>
|
Chris@49
|
1208 </li>
|
Chris@49
|
1209 <br>
|
Chris@49
|
1210
|
Chris@49
|
1211 <a name="adv_constructors_cube"></a>
|
Chris@49
|
1212 <li>
|
Chris@49
|
1213 Advanced constructors:
|
Chris@49
|
1214 <br>
|
Chris@49
|
1215 <br>
|
Chris@49
|
1216 <ul>
|
Chris@49
|
1217 <li>
|
Chris@49
|
1218 cube::fixed<n_rows, n_cols, n_slices>
|
Chris@49
|
1219 <br>
|
Chris@49
|
1220 <br>
|
Chris@49
|
1221 <ul>
|
Chris@49
|
1222 Create a fixed size cube, with the size specified via template arguments.
|
Chris@49
|
1223 Memory for the cube is allocated at compile time.
|
Chris@49
|
1224 This is generally faster than dynamic memory allocation, but the size of the cube can't be changed afterwards (directly or indirectly).
|
Chris@49
|
1225 </ul>
|
Chris@49
|
1226 </li>
|
Chris@49
|
1227 <br>
|
Chris@49
|
1228 <li>cube(aux_mem*, n_rows, n_cols, n_slices, copy_aux_mem = true, strict = true)
|
Chris@49
|
1229 <br>
|
Chris@49
|
1230 <br>
|
Chris@49
|
1231 <ul>
|
Chris@49
|
1232 Create a cube using data from writeable auxiliary memory.
|
Chris@49
|
1233 By default the cube allocates its own memory and copies data from the auxiliary memory (for safety).
|
Chris@49
|
1234 However, if <i>copy_aux_mem</i> is set to <i>false</i>,
|
Chris@49
|
1235 the cube will instead directly use the auxiliary memory (ie. no copying).
|
Chris@49
|
1236 This is faster, but can be dangerous unless you know what you're doing!
|
Chris@49
|
1237 <br>
|
Chris@49
|
1238 <br>
|
Chris@49
|
1239 The <i>strict</i> variable comes into effect only if <i>copy_aux_mem</i> is set to <i>false</i>
|
Chris@49
|
1240 (ie. the cube is directly using auxiliary memory).
|
Chris@49
|
1241 If <i>strict</i> is set to <i>true</i>,
|
Chris@49
|
1242 the cube will be bound to the auxiliary memory for its lifetime;
|
Chris@49
|
1243 the number of elements in the cube can't be changed (directly or indirectly).
|
Chris@49
|
1244 If <i>strict</i> is set to <i>false</i>, the cube will not be bound to the auxiliary memory for its lifetime,
|
Chris@49
|
1245 ie., the size of the cube can be changed.
|
Chris@49
|
1246 If the requested number of elements is different to the size of the auxiliary memory,
|
Chris@49
|
1247 new memory will be allocated and the auxiliary memory will no longer be used.
|
Chris@49
|
1248 </ul>
|
Chris@49
|
1249 </li>
|
Chris@49
|
1250 <br>
|
Chris@49
|
1251 <li>cube(const aux_mem*, n_rows, n_cols, n_slices)
|
Chris@49
|
1252 <br>
|
Chris@49
|
1253 <br>
|
Chris@49
|
1254 <ul>
|
Chris@49
|
1255 Create a cube by copying data from read-only auxiliary memory.
|
Chris@49
|
1256 </ul>
|
Chris@49
|
1257 </li>
|
Chris@49
|
1258 </ul>
|
Chris@49
|
1259 </li>
|
Chris@49
|
1260 <br>
|
Chris@49
|
1261 <br>
|
Chris@49
|
1262 <li>
|
Chris@49
|
1263 Examples:
|
Chris@49
|
1264 <ul>
|
Chris@49
|
1265 <pre>
|
Chris@49
|
1266 cube x(1,2,3);
|
Chris@49
|
1267 cube y = randu<cube>(4,5,6);
|
Chris@49
|
1268
|
Chris@49
|
1269 mat A = y.slice(1); // extract a slice from the cube
|
Chris@49
|
1270 // (each slice is a matrix)
|
Chris@49
|
1271
|
Chris@49
|
1272 mat B = randu<mat>(4,5);
|
Chris@49
|
1273 y.slice(2) = B; // set a slice in the cube
|
Chris@49
|
1274
|
Chris@49
|
1275 cube q = y + y; // cube addition
|
Chris@49
|
1276 cube r = y % y; // element-wise cube multiplication
|
Chris@49
|
1277
|
Chris@49
|
1278 cube::fixed<4,5,6> f;
|
Chris@49
|
1279 f.ones();
|
Chris@49
|
1280 </pre>
|
Chris@49
|
1281 </ul>
|
Chris@49
|
1282 </li>
|
Chris@49
|
1283 <br>
|
Chris@49
|
1284 <li>
|
Chris@49
|
1285 <b>Caveats</b>
|
Chris@49
|
1286 <br>
|
Chris@49
|
1287 <br>
|
Chris@49
|
1288 <ul>
|
Chris@49
|
1289 <li>
|
Chris@49
|
1290 The size of individual slices can't be changed.
|
Chris@49
|
1291 For example, the following <b>will not</b> work:
|
Chris@49
|
1292 <ul>
|
Chris@49
|
1293 <pre>
|
Chris@49
|
1294 cube c(5,6,7);
|
Chris@49
|
1295 c.slice(0) = randu<mat>(10,20); // wrong size
|
Chris@49
|
1296 </pre>
|
Chris@49
|
1297 </ul>
|
Chris@49
|
1298 </li>
|
Chris@49
|
1299 <li>
|
Chris@49
|
1300 For mathematical correctness, scalars are treated as 1x1x1 cubes during initialisation.
|
Chris@49
|
1301 As such, the code below <b>will not</b> generate a cube with every element equal to 123.0:
|
Chris@49
|
1302 <ul>
|
Chris@49
|
1303 <pre>
|
Chris@49
|
1304 cube c(5,6,7); c = 123.0;
|
Chris@49
|
1305 </pre>
|
Chris@49
|
1306 </ul>
|
Chris@49
|
1307 Use the following code instead:
|
Chris@49
|
1308 <ul>
|
Chris@49
|
1309 <pre>
|
Chris@49
|
1310 cube c(5,6,7); c.fill(123.0);
|
Chris@49
|
1311 </pre>
|
Chris@49
|
1312 </ul>
|
Chris@49
|
1313 <br>
|
Chris@49
|
1314 </ul>
|
Chris@49
|
1315 <li>
|
Chris@49
|
1316 See also:
|
Chris@49
|
1317 <ul>
|
Chris@49
|
1318 <li><a href="#attributes">cube attributes</a></li>
|
Chris@49
|
1319 <li><a href="#element_access">accessing elements</a></li>
|
Chris@49
|
1320 <li><a href="#operators">math & relational operators</a></li>
|
Chris@49
|
1321 <li><a href="#subcube">subcube views and slices</a></li>
|
Chris@49
|
1322 <li><a href="#save_load_mat">saving & loading cubes</a></li>
|
Chris@49
|
1323 <li><a href="#iterators_cube">STL-style element iterators</a></li>
|
Chris@49
|
1324 <li><a href="#Mat">Mat class</a></li>
|
Chris@49
|
1325 </ul>
|
Chris@49
|
1326 </li>
|
Chris@49
|
1327 <br>
|
Chris@49
|
1328 </ul>
|
Chris@49
|
1329 <hr class="greyline">
|
Chris@49
|
1330 <br>
|
Chris@49
|
1331
|
Chris@49
|
1332 <a name="field"></a>
|
Chris@49
|
1333 <b>field<</b><i>object type</i><b>></b>
|
Chris@49
|
1334 <ul>
|
Chris@49
|
1335 <li>
|
Chris@49
|
1336 Class for one and two dimensional fields of arbitrary objects
|
Chris@49
|
1337 </li>
|
Chris@49
|
1338 <br>
|
Chris@49
|
1339 <li>
|
Chris@49
|
1340 Constructors (where <i>object type</i> is another class, eg. <i>std::string</i>, <i>mat</i>, <i>vec</i>, <i>rowvec</i>, etc):
|
Chris@49
|
1341 <ul>
|
Chris@49
|
1342 field<<i>object type</i>>(n_elem=0)
|
Chris@49
|
1343 <br>field<<i>object type</i>>(n_rows, n_cols)
|
Chris@49
|
1344 <br>field<<i>object type</i>>(field<<i>object type</i>>)
|
Chris@49
|
1345 </ul>
|
Chris@49
|
1346 </li>
|
Chris@49
|
1347 <br>
|
Chris@49
|
1348 <li>
|
Chris@49
|
1349 Examples:
|
Chris@49
|
1350 <ul>
|
Chris@49
|
1351 <pre>
|
Chris@49
|
1352 // create a field of strings
|
Chris@49
|
1353 field<std::string> S(3,2);
|
Chris@49
|
1354
|
Chris@49
|
1355 S(0,0) = "hello";
|
Chris@49
|
1356 S(1,0) = "there";
|
Chris@49
|
1357
|
Chris@49
|
1358 // string fields can be saved as plain text files
|
Chris@49
|
1359 S.save("string_field");
|
Chris@49
|
1360
|
Chris@49
|
1361 // create a vec field with 3 rows and 2 columns
|
Chris@49
|
1362 field<vec> F(3,2);
|
Chris@49
|
1363
|
Chris@49
|
1364 // access components of the field
|
Chris@49
|
1365 F(0,0) = vec(5);
|
Chris@49
|
1366 F(1,1) = randu<vec>(6);
|
Chris@49
|
1367 F(2,0).set_size(7);
|
Chris@49
|
1368
|
Chris@49
|
1369 // access element 1 of the vec stored at 2,0
|
Chris@49
|
1370 double x = F(2,0)(1);
|
Chris@49
|
1371
|
Chris@49
|
1372 // copy rows
|
Chris@49
|
1373 F.row(0) = F.row(2);
|
Chris@49
|
1374
|
Chris@49
|
1375 // extract a row of vecs from F
|
Chris@49
|
1376 field<vec> G = F.row(1);
|
Chris@49
|
1377
|
Chris@49
|
1378 // print the field to the standard output
|
Chris@49
|
1379 G.print("G =");
|
Chris@49
|
1380
|
Chris@49
|
1381 // save the field to a binary file
|
Chris@49
|
1382 G.save("vec_field");
|
Chris@49
|
1383 </pre>
|
Chris@49
|
1384 </ul>
|
Chris@49
|
1385 </li>
|
Chris@49
|
1386 <br>
|
Chris@49
|
1387 <li>See also:
|
Chris@49
|
1388 <ul>
|
Chris@49
|
1389 <li><a href="#attributes">field attributes</a></li>
|
Chris@49
|
1390 <li><a href="#subfield">subfield views</a></li>
|
Chris@49
|
1391 <li><a href="#save_load_field">saving/loading fields</a></li>
|
Chris@49
|
1392 <li><a href="http://cplusplus.com/reference/string/string/">string class in the standard C++ library</a> (cplusplus.com)</li>
|
Chris@49
|
1393 </ul>
|
Chris@49
|
1394 </li>
|
Chris@49
|
1395 <br>
|
Chris@49
|
1396 </ul>
|
Chris@49
|
1397 <hr class="greyline">
|
Chris@49
|
1398 <br>
|
Chris@49
|
1399
|
Chris@49
|
1400
|
Chris@49
|
1401 <a name="SpMat"></a><b>SpMat<</b><i>type</i><b>></b>
|
Chris@49
|
1402 <br><b>sp_mat</b>
|
Chris@49
|
1403 <br><b>sp_cx_mat</b>
|
Chris@49
|
1404 <ul>
|
Chris@49
|
1405 <li>
|
Chris@49
|
1406 The root sparse matrix class is <b>SpMat<</b><i>type</i><b>></b>, where <i>type</i> can be one of:
|
Chris@49
|
1407 <i>char</i>, <i>int</i>, <i>float</i>, <i>double</i>, <i>std::complex<double></i>, etc.
|
Chris@49
|
1408 </li>
|
Chris@49
|
1409 <br>
|
Chris@49
|
1410 <li>
|
Chris@49
|
1411 For convenience the following typedefs have been defined:
|
Chris@49
|
1412 <ul>
|
Chris@49
|
1413 <table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
1414 <tbody>
|
Chris@49
|
1415 <tr>
|
Chris@49
|
1416 <td style="vertical-align: top;">
|
Chris@49
|
1417 sp_mat
|
Chris@49
|
1418 </td>
|
Chris@49
|
1419 <td style="vertical-align: top;">
|
Chris@49
|
1420 =
|
Chris@49
|
1421 </td>
|
Chris@49
|
1422 <td style="vertical-align: top;">
|
Chris@49
|
1423 SpMat<double>
|
Chris@49
|
1424 </td>
|
Chris@49
|
1425 </tr>
|
Chris@49
|
1426 <tr>
|
Chris@49
|
1427 <td style="vertical-align: top;">
|
Chris@49
|
1428 sp_fmat
|
Chris@49
|
1429 </td>
|
Chris@49
|
1430 <td style="vertical-align: top;">
|
Chris@49
|
1431 =
|
Chris@49
|
1432 </td>
|
Chris@49
|
1433 <td style="vertical-align: top;">
|
Chris@49
|
1434 SpMat<float>
|
Chris@49
|
1435 </td>
|
Chris@49
|
1436 </tr>
|
Chris@49
|
1437 <tr>
|
Chris@49
|
1438 <td style="vertical-align: top;">
|
Chris@49
|
1439 sp_cx_mat
|
Chris@49
|
1440 </td>
|
Chris@49
|
1441 <td style="vertical-align: top;">
|
Chris@49
|
1442 =
|
Chris@49
|
1443 </td>
|
Chris@49
|
1444 <td style="vertical-align: top;">
|
Chris@49
|
1445 SpMat<<a href="#cx_float_double">cx_double</a>>
|
Chris@49
|
1446 </td>
|
Chris@49
|
1447 </tr>
|
Chris@49
|
1448 <tr>
|
Chris@49
|
1449 <td style="vertical-align: top;">
|
Chris@49
|
1450 sp_cx_fmat
|
Chris@49
|
1451 </td>
|
Chris@49
|
1452 <td style="vertical-align: top;">
|
Chris@49
|
1453 =
|
Chris@49
|
1454 </td>
|
Chris@49
|
1455 <td style="vertical-align: top;">
|
Chris@49
|
1456 SpMat<<a href="#cx_float_double">cx_float</a>>
|
Chris@49
|
1457 </td>
|
Chris@49
|
1458 </tr>
|
Chris@49
|
1459 <tr>
|
Chris@49
|
1460 <td style="vertical-align: top;">
|
Chris@49
|
1461 sp_umat
|
Chris@49
|
1462 </td>
|
Chris@49
|
1463 <td style="vertical-align: top;">
|
Chris@49
|
1464 =
|
Chris@49
|
1465 </td>
|
Chris@49
|
1466 <td style="vertical-align: top;">
|
Chris@49
|
1467 SpMat<<a href="#uword">uword</a>>
|
Chris@49
|
1468 </td>
|
Chris@49
|
1469 </tr>
|
Chris@49
|
1470 <tr>
|
Chris@49
|
1471 <td style="vertical-align: top;">
|
Chris@49
|
1472 sp_imat
|
Chris@49
|
1473 </td>
|
Chris@49
|
1474 <td style="vertical-align: top;">
|
Chris@49
|
1475 =
|
Chris@49
|
1476 </td>
|
Chris@49
|
1477 <td style="vertical-align: top;">
|
Chris@49
|
1478 SpMat<<a href="#uword">sword</a>>
|
Chris@49
|
1479 </td>
|
Chris@49
|
1480 </tr>
|
Chris@49
|
1481 </tbody>
|
Chris@49
|
1482 </table>
|
Chris@49
|
1483 </ul>
|
Chris@49
|
1484 </li>
|
Chris@49
|
1485 <br>
|
Chris@49
|
1486 <li>
|
Chris@49
|
1487 In this documentation the <i>sp_mat</i> type is used for convenience;
|
Chris@49
|
1488 it is possible to use other types instead, eg. <i>sp_fmat</i>
|
Chris@49
|
1489 </li>
|
Chris@49
|
1490 <br>
|
Chris@49
|
1491 <a name="constructors_sp_mat"></a>
|
Chris@49
|
1492 <li>
|
Chris@49
|
1493 Constructors:
|
Chris@49
|
1494 <ul>
|
Chris@49
|
1495 <li>sp_mat()</li>
|
Chris@49
|
1496 <li>sp_mat(n_rows, n_cols)</li>
|
Chris@49
|
1497 <li>sp_mat(sp_mat)</li>
|
Chris@49
|
1498 <li>sp_mat(string)</li>
|
Chris@49
|
1499 <li>sp_cx_mat(sp_mat,sp_mat) (for constructing a complex matrix out of two real matrices)</li>
|
Chris@49
|
1500 </ul>
|
Chris@49
|
1501 <br>
|
Chris@49
|
1502 <li>
|
Chris@49
|
1503 <a name="batch_constructors_sp_mat"></a>
|
Chris@49
|
1504 Batch insertion constructors:
|
Chris@49
|
1505 <ul>
|
Chris@49
|
1506 <li>sp_mat(locations, values, n_rows, n_cols, sort_locations = true)</li>
|
Chris@49
|
1507 <li>sp_mat(locations, values, sort_locations = true)</li>
|
Chris@49
|
1508 </ul>
|
Chris@49
|
1509 <br>
|
Chris@49
|
1510 <li>
|
Chris@49
|
1511 Elements are stored in the <i>compressed sparse column</i> (CSC) format
|
Chris@49
|
1512 </li>
|
Chris@49
|
1513 <br>
|
Chris@49
|
1514 <li>
|
Chris@49
|
1515 All elements are treated as zero by default
|
Chris@49
|
1516 </li>
|
Chris@49
|
1517 <br>
|
Chris@49
|
1518 <li>
|
Chris@49
|
1519 This class behaves in a similar manner to the <a href="#Mat">Mat</a> class,
|
Chris@49
|
1520 however, member functions which set all elements to non-zero values (and hence do not make sense for sparse matrices) have been deliberately omitted;
|
Chris@49
|
1521 examples of omitted functions: <a href="#fill">.fill()</a>, <a href="#ones_member">.ones()</a>, += scalar, etc.
|
Chris@49
|
1522 </li>
|
Chris@49
|
1523 <br>
|
Chris@49
|
1524
|
Chris@49
|
1525 <li>Batch insertion of values:
|
Chris@49
|
1526 <ul>
|
Chris@49
|
1527 <li>
|
Chris@49
|
1528 Using batch insertion constructors is generally much faster than consecutively inserting values using <a href="#element_access">element access operators</a>
|
Chris@49
|
1529 </li>
|
Chris@49
|
1530 <br>
|
Chris@49
|
1531 <li>
|
Chris@49
|
1532 <i>locations</i> is a dense matrix of type <i>umat</i>, with a size of <i>2</i> x <i>N</i>, where <i>N</i> is the number of values to be inserted.
|
Chris@49
|
1533 The row and column of the <i>i</i>-th element are specified as <i>locations(0,i)</i> and <i>locations(1,i)</i>, respectively.
|
Chris@49
|
1534 </li>
|
Chris@49
|
1535 <br>
|
Chris@49
|
1536 <li>
|
Chris@49
|
1537 <i>values</i> is a dense column vector containing the values to be inserted.
|
Chris@49
|
1538 It must have the same element type as the sparse matrix.
|
Chris@49
|
1539 The value in <i>values[i]</i> will be inserted at the location specified by the <i>i</i>-th column of the <i>locations</i> matrix.
|
Chris@49
|
1540 </li>
|
Chris@49
|
1541 <br>
|
Chris@49
|
1542 <li>
|
Chris@49
|
1543 The size of the constructed matrix is either manually specified via <i>n_rows</i> and <i>n_cols</i>,
|
Chris@49
|
1544 or automatically determined from the maximal locations in the <i>locations</i> matrix.
|
Chris@49
|
1545 </li>
|
Chris@49
|
1546 <br>
|
Chris@49
|
1547 <li>
|
Chris@49
|
1548 If <i>sort_locations</i> is set to <i>false</i>, the <i>locations</i> matrix is assumed to contain locations that are already sorted according to column-major ordering.
|
Chris@49
|
1549 </li>
|
Chris@49
|
1550 </ul>
|
Chris@49
|
1551 </li>
|
Chris@49
|
1552 <br>
|
Chris@49
|
1553
|
Chris@49
|
1554 <li>
|
Chris@49
|
1555 <b>Caveat:</b>
|
Chris@49
|
1556 support for sparse matrices in this version is <b>preliminary</b>;
|
Chris@49
|
1557 it is not yet fully optimised, and sparse matrix decompositions/factorisations are not yet implemented.
|
Chris@49
|
1558 The following subset of operations currently works with sparse matrices:
|
Chris@49
|
1559 <ul>
|
Chris@49
|
1560 <li>element access</li>
|
Chris@49
|
1561 <li>fundamental arithmetic operations (such as addition and multiplication)</li>
|
Chris@49
|
1562 <li>submatrix views</li>
|
Chris@49
|
1563 <li>saving and loading (in <i>arma_binary</i> format)</li>
|
Chris@49
|
1564 <li>
|
Chris@49
|
1565 <a href="#abs">abs()</a>,
|
Chris@49
|
1566 <a href="#accu">accu()</a>,
|
Chris@49
|
1567 <a href="#as_scalar">as_scalar()</a>,
|
Chris@49
|
1568 <a href="#dot">dot()</a>,
|
Chris@49
|
1569 <a href="#stats_fns">mean()</a>,
|
Chris@49
|
1570 <a href="#min_and_max">min()</a>,
|
Chris@49
|
1571 <a href="#min_and_max">max()</a>,
|
Chris@49
|
1572 <a href="#norm">norm()</a>,
|
Chris@49
|
1573 <a href="#print">print()</a>,
|
Chris@49
|
1574 <a href="#speye">speye()</a>,
|
Chris@49
|
1575 <a href="#sprandu_sprandn">sprandu()/sprandn()</a>,
|
Chris@49
|
1576 <a href="#misc_fns">square()</a>,
|
Chris@49
|
1577 <a href="#misc_fns">sqrt()</a>,
|
Chris@49
|
1578 <a href="#sum">sum()</a>,
|
Chris@49
|
1579 <a href="#trace">trace()</a>,
|
Chris@49
|
1580 <a href="#trans">trans()</a>,
|
Chris@49
|
1581 <a href="#stats_fns">var()</a>
|
Chris@49
|
1582 </li>
|
Chris@49
|
1583 </ul>
|
Chris@49
|
1584 </li>
|
Chris@49
|
1585 <br>
|
Chris@49
|
1586
|
Chris@49
|
1587 <li>
|
Chris@49
|
1588 Examples:
|
Chris@49
|
1589 <ul>
|
Chris@49
|
1590 <pre>
|
Chris@49
|
1591 sp_mat A(5,6);
|
Chris@49
|
1592 sp_mat B(6,5);
|
Chris@49
|
1593
|
Chris@49
|
1594 A(0,0) = 1;
|
Chris@49
|
1595 A(1,0) = 2;
|
Chris@49
|
1596
|
Chris@49
|
1597 B(0,0) = 3;
|
Chris@49
|
1598 B(0,1) = 4;
|
Chris@49
|
1599
|
Chris@49
|
1600 sp_mat C = 2*B;
|
Chris@49
|
1601
|
Chris@49
|
1602 sp_mat D = A*C;
|
Chris@49
|
1603
|
Chris@49
|
1604
|
Chris@49
|
1605 // batch insertion of two values at (5, 6) and (9, 9)
|
Chris@49
|
1606 umat locations;
|
Chris@49
|
1607 locations << 5 << 9 << endr
|
Chris@49
|
1608 << 6 << 9 << endr;
|
Chris@49
|
1609
|
Chris@49
|
1610 vec values;
|
Chris@49
|
1611 values << 1.5 << 3.2 << endr;
|
Chris@49
|
1612
|
Chris@49
|
1613 sp_mat X(locations, values);
|
Chris@49
|
1614 </pre>
|
Chris@49
|
1615 </ul>
|
Chris@49
|
1616 </li>
|
Chris@49
|
1617 <br>
|
Chris@49
|
1618 <li>
|
Chris@49
|
1619 See also:
|
Chris@49
|
1620 <ul>
|
Chris@49
|
1621 <li><a href="#element_access">accessing elements</a></li>
|
Chris@49
|
1622 <li><a href="#print">printing matrices</a></li>
|
Chris@49
|
1623 <!--
|
Chris@49
|
1624 <li><a href="#SpCol">SpCol class</a> (TODO: add to documentation)</li>
|
Chris@49
|
1625 <li><a href="#SpRow">SpRow class</a> (TODO: add to documentation)</li>
|
Chris@49
|
1626 -->
|
Chris@49
|
1627 <li><a href="http://en.wikipedia.org/wiki/Sparse_matrix">Sparse Matrix in Wikipedia</a></li>
|
Chris@49
|
1628 <li><a href="#Mat">Mat class</a> (dense matrix)</li>
|
Chris@49
|
1629 </ul>
|
Chris@49
|
1630 </li>
|
Chris@49
|
1631 <br>
|
Chris@49
|
1632 </ul>
|
Chris@49
|
1633 <hr class="greyline">
|
Chris@49
|
1634 <hr class="greyline">
|
Chris@49
|
1635 <br>
|
Chris@49
|
1636 <br>
|
Chris@49
|
1637 <font size=+1><b>Member Functions & Variables</b></font>
|
Chris@49
|
1638 <br>
|
Chris@49
|
1639 <br>
|
Chris@49
|
1640 <hr class="greyline">
|
Chris@49
|
1641 <br>
|
Chris@49
|
1642
|
Chris@49
|
1643 <a name="attributes"></a>
|
Chris@49
|
1644
|
Chris@49
|
1645 <b>attributes</b>
|
Chris@49
|
1646 <ul>
|
Chris@49
|
1647 <table style="text-align: left;" border="0" cellpadding="0" cellspacing="0">
|
Chris@49
|
1648 <tbody>
|
Chris@49
|
1649 <tr>
|
Chris@49
|
1650 <td>
|
Chris@49
|
1651 <b>.n_rows</b>
|
Chris@49
|
1652 </td>
|
Chris@49
|
1653 <td> </td>
|
Chris@49
|
1654 <td>
|
Chris@49
|
1655 (number of rows)
|
Chris@49
|
1656 </td>
|
Chris@49
|
1657 </tr>
|
Chris@49
|
1658 <tr>
|
Chris@49
|
1659 <td>
|
Chris@49
|
1660 <b>.n_cols</b>
|
Chris@49
|
1661 </td>
|
Chris@49
|
1662 <td> </td>
|
Chris@49
|
1663 <td>
|
Chris@49
|
1664 (number of columns)
|
Chris@49
|
1665 </td>
|
Chris@49
|
1666 </tr>
|
Chris@49
|
1667 <tr>
|
Chris@49
|
1668 <td>
|
Chris@49
|
1669 <b>.n_elem</b>
|
Chris@49
|
1670 </td>
|
Chris@49
|
1671 <td> </td>
|
Chris@49
|
1672 <td>
|
Chris@49
|
1673 (total number of elements)
|
Chris@49
|
1674 </td>
|
Chris@49
|
1675 </tr>
|
Chris@49
|
1676 <tr>
|
Chris@49
|
1677 <td>
|
Chris@49
|
1678 <b>.n_slices</b>
|
Chris@49
|
1679 </td>
|
Chris@49
|
1680 <td> </td>
|
Chris@49
|
1681 <td>
|
Chris@49
|
1682 (number of slices)
|
Chris@49
|
1683 </td>
|
Chris@49
|
1684 </tr>
|
Chris@49
|
1685 <tr>
|
Chris@49
|
1686 <td>
|
Chris@49
|
1687 <b>.n_nonzero</b>
|
Chris@49
|
1688 </td>
|
Chris@49
|
1689 <td> </td>
|
Chris@49
|
1690 <td>
|
Chris@49
|
1691 (number of nonzero elements)
|
Chris@49
|
1692 </td>
|
Chris@49
|
1693 </tr>
|
Chris@49
|
1694 </tbody>
|
Chris@49
|
1695 </table>
|
Chris@49
|
1696 </ul>
|
Chris@49
|
1697 <br>
|
Chris@49
|
1698 <ul>
|
Chris@49
|
1699 <li>
|
Chris@49
|
1700 Member variables which are read-only;
|
Chris@49
|
1701 to change the size, use
|
Chris@49
|
1702 <a href="#set_size">.set_size()</a>,
|
Chris@49
|
1703 <a href="#copy_size">.copy_size()</a>,
|
Chris@49
|
1704 <a href="#zeros_member">.zeros()</a>,
|
Chris@49
|
1705 <a href="#ones_member">.ones()</a>,
|
Chris@49
|
1706 or
|
Chris@49
|
1707 <a href="#reset">.reset()</a>
|
Chris@49
|
1708 </li>
|
Chris@49
|
1709 <br>
|
Chris@49
|
1710 <li><i>n_rows</i>, <i>n_cols</i> and <i>n_elem</i> are applicable to <i>Mat</i>, <i>SpMat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i> and <i>field</i> classes</li>
|
Chris@49
|
1711 <br>
|
Chris@49
|
1712 <li><i>n_slices</i> is applicable only to the <i>Cube</i> class</li>
|
Chris@49
|
1713 <br>
|
Chris@49
|
1714 <li><i>n_nonzero</i> is applicable only to the <i>SpMat</i> class</li>
|
Chris@49
|
1715 <br>
|
Chris@49
|
1716 <li>
|
Chris@49
|
1717 For the <i>Col</i> and <i>Row</i> classes, <i>n_elem</i> also indicates vector length</li>
|
Chris@49
|
1718 <br>
|
Chris@49
|
1719 <li>The variables are of type <a href="#uword">uword</a></li>
|
Chris@49
|
1720 <br>
|
Chris@49
|
1721 <li>
|
Chris@49
|
1722 Examples:
|
Chris@49
|
1723 <ul>
|
Chris@49
|
1724 <pre>
|
Chris@49
|
1725 mat X(4,5);
|
Chris@49
|
1726 cout << "X has " << X.n_cols << " columns" << endl;
|
Chris@49
|
1727 </pre>
|
Chris@49
|
1728 </ul>
|
Chris@49
|
1729 </li>
|
Chris@49
|
1730 <br>
|
Chris@49
|
1731 <li>
|
Chris@49
|
1732 See also:
|
Chris@49
|
1733 <ul>
|
Chris@49
|
1734 <li><a href="#set_size">.set_size()</a></li>
|
Chris@49
|
1735 <li><a href="#copy_size">.copy_size()</a></li>
|
Chris@49
|
1736 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
1737 <li><a href="#ones_member">.ones()</a></li>
|
Chris@49
|
1738 <li><a href="#reset">.reset()</a></li>
|
Chris@49
|
1739 </ul>
|
Chris@49
|
1740 </li>
|
Chris@49
|
1741 <br>
|
Chris@49
|
1742 </ul>
|
Chris@49
|
1743 <hr class="greyline"><br>
|
Chris@49
|
1744
|
Chris@49
|
1745 <a name="colptr"></a>
|
Chris@49
|
1746 <b>.colptr(col_number)</b>
|
Chris@49
|
1747 <ul>
|
Chris@49
|
1748 <li>
|
Chris@49
|
1749 Member function of <i>Mat</i>
|
Chris@49
|
1750 </li>
|
Chris@49
|
1751 <br>
|
Chris@49
|
1752 <li>
|
Chris@49
|
1753 Obtain a raw pointer to the memory used by the specified column
|
Chris@49
|
1754 </li>
|
Chris@49
|
1755 <br>
|
Chris@49
|
1756 <li>
|
Chris@49
|
1757 As soon as the size of the matrix is changed, the pointer is no longer valid
|
Chris@49
|
1758 </li>
|
Chris@49
|
1759 <br>
|
Chris@49
|
1760 <li>This function is not recommended for use unless you know what you're doing
|
Chris@49
|
1761 -- you may wish to use <a href="#submat">submatrix views</a> instead
|
Chris@49
|
1762 </li>
|
Chris@49
|
1763 <br>
|
Chris@49
|
1764 <li>
|
Chris@49
|
1765 Examples:
|
Chris@49
|
1766 <ul>
|
Chris@49
|
1767 <pre>
|
Chris@49
|
1768 mat A = randu<mat>(5,5);
|
Chris@49
|
1769
|
Chris@49
|
1770 double* mem = A.colptr(2);
|
Chris@49
|
1771 </pre>
|
Chris@49
|
1772 </ul>
|
Chris@49
|
1773 </li>
|
Chris@49
|
1774 <br>
|
Chris@49
|
1775 <li>
|
Chris@49
|
1776 See also:
|
Chris@49
|
1777 <ul>
|
Chris@49
|
1778 <li><a href="#memptr">.memptr()</a></li>
|
Chris@49
|
1779 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
1780 <li><a href="#element_access">element access</a></li>
|
Chris@49
|
1781 <li><a href="#iterators_mat">iterators (matrices)</a></li>
|
Chris@49
|
1782 <li><a href="#adv_constructors_mat">advanced constructors (matrices)</a></li>
|
Chris@49
|
1783 </ul>
|
Chris@49
|
1784 </li>
|
Chris@49
|
1785 <br>
|
Chris@49
|
1786 </ul>
|
Chris@49
|
1787 <hr class="greyline"><br>
|
Chris@49
|
1788
|
Chris@49
|
1789 <a name="copy_size"></a>
|
Chris@49
|
1790 <b>.copy_size(A)</b>
|
Chris@49
|
1791 <ul>
|
Chris@49
|
1792 <li>
|
Chris@49
|
1793 Member function of <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i> and <i>field</i>
|
Chris@49
|
1794 </li>
|
Chris@49
|
1795 <br>
|
Chris@49
|
1796 <li>
|
Chris@49
|
1797 Set the size to be the same as object <i>A</i>
|
Chris@49
|
1798 </li>
|
Chris@49
|
1799 <br>
|
Chris@49
|
1800 <li>
|
Chris@49
|
1801 Object <i>A</i> must be of the same root type as the object being modified
|
Chris@49
|
1802 (eg. you can't set the size of a matrix by providing a cube)
|
Chris@49
|
1803 </li>
|
Chris@49
|
1804 <br>
|
Chris@49
|
1805 <li>
|
Chris@49
|
1806 Examples:
|
Chris@49
|
1807 <ul>
|
Chris@49
|
1808 <pre>
|
Chris@49
|
1809 mat A = randu<mat>(5,6);
|
Chris@49
|
1810 mat B;
|
Chris@49
|
1811 B.copy_size(A);
|
Chris@49
|
1812
|
Chris@49
|
1813 cout << B.n_rows << endl;
|
Chris@49
|
1814 cout << B.n_cols << endl;
|
Chris@49
|
1815 </pre>
|
Chris@49
|
1816 </ul>
|
Chris@49
|
1817 </li>
|
Chris@49
|
1818 <br>
|
Chris@49
|
1819 <li>
|
Chris@49
|
1820 See also:
|
Chris@49
|
1821 <ul>
|
Chris@49
|
1822 <li><a href="#reset">.reset()</a></li>
|
Chris@49
|
1823 <li><a href="#set_size">.set_size()</a></li>
|
Chris@49
|
1824 <li><a href="#reshape_member">.reshape()</a></li>
|
Chris@49
|
1825 <li><a href="#resize_member">.resize()</a></li>
|
Chris@49
|
1826 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
1827 </ul>
|
Chris@49
|
1828 </li>
|
Chris@49
|
1829 </ul>
|
Chris@49
|
1830 <br>
|
Chris@49
|
1831 <hr class="greyline"><br>
|
Chris@49
|
1832
|
Chris@49
|
1833 <a name="diag"></a>
|
Chris@49
|
1834 <b>.diag(</b><i>k=0</i><b>)</b>
|
Chris@49
|
1835 <ul>
|
Chris@49
|
1836 <li>
|
Chris@49
|
1837 Member function of <i>Mat</i>
|
Chris@49
|
1838 </li>
|
Chris@49
|
1839 <br>
|
Chris@49
|
1840 <li>
|
Chris@49
|
1841 Read/write access to the <i>k</i>-th diagonal in a matrix
|
Chris@49
|
1842 </li>
|
Chris@49
|
1843 <br>
|
Chris@49
|
1844 <li>The argument <i>k</i> is optional -- by default the main diagonal is accessed (<i>k=0</i>)</li>
|
Chris@49
|
1845 <br>
|
Chris@49
|
1846 <li>For <i>k > 0</i>, the <i>k</i>-th super-diagonal is accessed (top-right corner)</li>
|
Chris@49
|
1847 <br>
|
Chris@49
|
1848 <li>For <i>k < 0</i>, the <i>k</i>-th sub-diagonal is accessed (bottom-left corner)</li>
|
Chris@49
|
1849 <br>
|
Chris@49
|
1850 <li>
|
Chris@49
|
1851 An extracted diagonal is interpreted as a column vector
|
Chris@49
|
1852 </li>
|
Chris@49
|
1853 <br>
|
Chris@49
|
1854 <li>
|
Chris@49
|
1855 Examples:
|
Chris@49
|
1856 <ul>
|
Chris@49
|
1857 <pre>
|
Chris@49
|
1858 mat X = randu<mat>(5,5);
|
Chris@49
|
1859
|
Chris@49
|
1860 vec a = X.diag();
|
Chris@49
|
1861 vec b = X.diag(1);
|
Chris@49
|
1862 vec c = X.diag(-2);
|
Chris@49
|
1863
|
Chris@49
|
1864 X.diag() = randu<vec>(5);
|
Chris@49
|
1865 X.diag() += 6;
|
Chris@49
|
1866 </pre>
|
Chris@49
|
1867 </ul>
|
Chris@49
|
1868 </li>
|
Chris@49
|
1869 <br>
|
Chris@49
|
1870 <li>
|
Chris@49
|
1871 See also:
|
Chris@49
|
1872 <ul>
|
Chris@49
|
1873 <li><a href="#eye_member">.eye()</a></li>
|
Chris@49
|
1874 <li><a href="#diagvec">diagvec()</a></li>
|
Chris@49
|
1875 <li><a href="#diagmat">diagmat()</a></li>
|
Chris@49
|
1876 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
1877 <li><a href="#each_colrow">.each_col() & .each_row()</a></li>
|
Chris@49
|
1878 <li><a href="#trace">trace()</a></li>
|
Chris@49
|
1879 </ul>
|
Chris@49
|
1880 </li>
|
Chris@49
|
1881 </ul>
|
Chris@49
|
1882 <br>
|
Chris@49
|
1883 <hr class="greyline"><br>
|
Chris@49
|
1884
|
Chris@49
|
1885 <a name="each_colrow"></a>
|
Chris@49
|
1886 <b>.each_col()</b>
|
Chris@49
|
1887 <br>
|
Chris@49
|
1888 <b>.each_row()</b>
|
Chris@49
|
1889 <br>
|
Chris@49
|
1890 <br>
|
Chris@49
|
1891 <b>.each_col(</b><i>vector_of_indices</i><b>)</b>
|
Chris@49
|
1892 <br>
|
Chris@49
|
1893 <b>.each_row(</b><i>vector_of_indices</i><b>)</b>
|
Chris@49
|
1894 <ul>
|
Chris@49
|
1895 <li>
|
Chris@49
|
1896 Member functions of <i>Mat</i>
|
Chris@49
|
1897 </li>
|
Chris@49
|
1898 <br>
|
Chris@49
|
1899 <li>
|
Chris@49
|
1900 Write access to each column or row of a matrix/submatrix,
|
Chris@49
|
1901 allowing a vector operation to be repeated on each column or row
|
Chris@49
|
1902 </li>
|
Chris@49
|
1903 <br>
|
Chris@49
|
1904 <li>
|
Chris@49
|
1905 The operation can be in-place vector addition, subtraction, element-wise multiplication, element-wise division, or simply vector copy
|
Chris@49
|
1906 </li>
|
Chris@49
|
1907 <br>
|
Chris@49
|
1908 <li>The argument <i>vector_of_indices</i> is optional -- by default all columns or rows are accessed</li>
|
Chris@49
|
1909 <br>
|
Chris@49
|
1910 <li>
|
Chris@49
|
1911 If the argument <i>vector_of_indices</i> is used, it must evaluate to be a vector of type <i><a href="#Col">uvec</a></i>;
|
Chris@49
|
1912 the vector contains a list of indices of the columns or rows to be accessed
|
Chris@49
|
1913 </li>
|
Chris@49
|
1914 <br>
|
Chris@49
|
1915 <li>
|
Chris@49
|
1916 These functions were added in version 3.4
|
Chris@49
|
1917 </li>
|
Chris@49
|
1918 <br>
|
Chris@49
|
1919 <li>
|
Chris@49
|
1920 Examples:
|
Chris@49
|
1921 <ul>
|
Chris@49
|
1922 <pre>
|
Chris@49
|
1923 mat X = ones<mat>(6,5);
|
Chris@49
|
1924 vec v = linspace<vec>(10,15,6);
|
Chris@49
|
1925
|
Chris@49
|
1926 // add v to each column in X
|
Chris@49
|
1927 X.each_col() += v;
|
Chris@49
|
1928
|
Chris@49
|
1929 // subtract v from columns 0 through to 3 in X
|
Chris@49
|
1930 X.cols(0,3).each_col() -= v;
|
Chris@49
|
1931
|
Chris@49
|
1932 uvec indices(2);
|
Chris@49
|
1933 indices(0) = 2;
|
Chris@49
|
1934 indices(1) = 4;
|
Chris@49
|
1935
|
Chris@49
|
1936 // copy v to columns 2 and 4 in X
|
Chris@49
|
1937 X.each_col(indices) = v;
|
Chris@49
|
1938 </pre>
|
Chris@49
|
1939 </ul>
|
Chris@49
|
1940 </li>
|
Chris@49
|
1941 <br>
|
Chris@49
|
1942 <li>
|
Chris@49
|
1943 See also:
|
Chris@49
|
1944 <ul>
|
Chris@49
|
1945 <li><a href="#diag">diagonal views</a></li>
|
Chris@49
|
1946 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
1947 </ul>
|
Chris@49
|
1948 </li>
|
Chris@49
|
1949 </ul>
|
Chris@49
|
1950 <br>
|
Chris@49
|
1951 <hr class="greyline"><br>
|
Chris@49
|
1952
|
Chris@49
|
1953 <a name="element_access"></a>
|
Chris@49
|
1954 <b>element/object access via (), [] and .at()</b>
|
Chris@49
|
1955 <ul>
|
Chris@49
|
1956 <li>
|
Chris@49
|
1957 Provide access to individual elements or objects stored in a container object
|
Chris@49
|
1958 (ie., <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i>, <i>field</i>)<br>
|
Chris@49
|
1959 <br>
|
Chris@49
|
1960 <ul>
|
Chris@49
|
1961 <table style="text-align: left; width: 100%;"
|
Chris@49
|
1962 border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
1963 <tbody>
|
Chris@49
|
1964 <tr>
|
Chris@49
|
1965 <td style="vertical-align: top;">
|
Chris@49
|
1966 <pre>(n)</pre>
|
Chris@49
|
1967 </td>
|
Chris@49
|
1968 <td style="vertical-align: top;"> <br>
|
Chris@49
|
1969 </td>
|
Chris@49
|
1970 <td style="vertical-align: top;">
|
Chris@49
|
1971 For <i>vec</i> and <i>rowvec</i>, access the <i>n</i>-th element.
|
Chris@49
|
1972 For <i>mat</i>, <i>cube</i> and <i>field</i>, access the <i>n</i>-th element/object under the assumption of a flat layout,
|
Chris@49
|
1973 with column-major ordering of data (ie. column by column).
|
Chris@49
|
1974 A <i>std::logic_error</i> exception is thrown if the requested element is out of bounds.
|
Chris@49
|
1975 The bounds check can be <a href="#element_access_bounds_check_note">optionally disabled</a> at compile-time to get more speed.
|
Chris@49
|
1976 </td>
|
Chris@49
|
1977 </tr>
|
Chris@49
|
1978 <tr>
|
Chris@49
|
1979 <td> </td>
|
Chris@49
|
1980 <td> </td>
|
Chris@49
|
1981 <td> </td>
|
Chris@49
|
1982 </tr>
|
Chris@49
|
1983 <tr>
|
Chris@49
|
1984 <td style="vertical-align: top;">
|
Chris@49
|
1985 <pre>.at(n) and [n]</pre>
|
Chris@49
|
1986 </td>
|
Chris@49
|
1987 <td style="vertical-align: top;"><br>
|
Chris@49
|
1988 </td>
|
Chris@49
|
1989 <td style="vertical-align: top;">
|
Chris@49
|
1990 As for <i>(n)</i>, but without a bounds check.
|
Chris@49
|
1991 Not recommended for use unless your code has been thoroughly debugged.
|
Chris@49
|
1992 </td>
|
Chris@49
|
1993 </tr>
|
Chris@49
|
1994 <tr>
|
Chris@49
|
1995 <td> </td>
|
Chris@49
|
1996 <td> </td>
|
Chris@49
|
1997 <td> </td>
|
Chris@49
|
1998 </tr>
|
Chris@49
|
1999 <tr>
|
Chris@49
|
2000 <td style="vertical-align: top;">
|
Chris@49
|
2001 <pre>(i,j)</pre>
|
Chris@49
|
2002 </td>
|
Chris@49
|
2003 <td style="vertical-align: top;"><br>
|
Chris@49
|
2004 </td>
|
Chris@49
|
2005 <td style="vertical-align: top;">
|
Chris@49
|
2006 For <i>mat</i> and <i>field</i> classes, access the element/object stored at the <i>i</i>-th row and <i>j</i>-th column.
|
Chris@49
|
2007 A <i>std::logic_error</i> exception is thrown if the requested element is out of bounds.
|
Chris@49
|
2008 The bounds check can be <a href="#element_access_bounds_check_note">optionally disabled</a> at compile-time to get more speed.
|
Chris@49
|
2009 </td>
|
Chris@49
|
2010 </tr>
|
Chris@49
|
2011 <tr>
|
Chris@49
|
2012 <td> </td>
|
Chris@49
|
2013 <td> </td>
|
Chris@49
|
2014 <td> </td>
|
Chris@49
|
2015 </tr>
|
Chris@49
|
2016 <tr>
|
Chris@49
|
2017 <td style="vertical-align: top;">
|
Chris@49
|
2018 <pre>.at(i,j)</pre>
|
Chris@49
|
2019 </td>
|
Chris@49
|
2020 <td style="vertical-align: top;"><br>
|
Chris@49
|
2021 </td>
|
Chris@49
|
2022 <td style="vertical-align: top;">
|
Chris@49
|
2023 As for <i>(i,j)</i>, but without a bounds check.
|
Chris@49
|
2024 Not recommended for use unless your code has been thoroughly debugged.
|
Chris@49
|
2025 </td>
|
Chris@49
|
2026 <td style="vertical-align: top;"><br>
|
Chris@49
|
2027 </td>
|
Chris@49
|
2028 </tr>
|
Chris@49
|
2029 <tr>
|
Chris@49
|
2030 <td> </td>
|
Chris@49
|
2031 <td> </td>
|
Chris@49
|
2032 <td> </td>
|
Chris@49
|
2033 </tr>
|
Chris@49
|
2034 <tr>
|
Chris@49
|
2035 <td style="vertical-align: top;">
|
Chris@49
|
2036 <pre>(i,j,k)</pre>
|
Chris@49
|
2037 </td>
|
Chris@49
|
2038 <td style="vertical-align: top;"><br>
|
Chris@49
|
2039 </td>
|
Chris@49
|
2040 <td style="vertical-align: top;">
|
Chris@49
|
2041 Cube only: access the element stored at the <i>i</i>-th row, <i>j</i>-th column and <i>k</i>-th slice.
|
Chris@49
|
2042 A <i>std::logic_error</i> exception is thrown if the requested element is out of bounds.
|
Chris@49
|
2043 The bounds check can be <a href="#element_access_bounds_check_note">optionally disabled</a> at compile-time to get more speed.
|
Chris@49
|
2044 </td>
|
Chris@49
|
2045 </tr>
|
Chris@49
|
2046 <tr>
|
Chris@49
|
2047 <td> </td>
|
Chris@49
|
2048 <td> </td>
|
Chris@49
|
2049 <td> </td>
|
Chris@49
|
2050 </tr>
|
Chris@49
|
2051 <tr>
|
Chris@49
|
2052 <td style="vertical-align: top;">
|
Chris@49
|
2053 <pre>.at(i,j,k)</pre>
|
Chris@49
|
2054 </td>
|
Chris@49
|
2055 <td style="vertical-align: top;"><br>
|
Chris@49
|
2056 </td>
|
Chris@49
|
2057 <td style="vertical-align: top;">
|
Chris@49
|
2058 As for <i>(i,j,k)</i>, but without a bounds check.
|
Chris@49
|
2059 Not recommended for use unless your code has been thoroughly debugged.</td>
|
Chris@49
|
2060 </tr>
|
Chris@49
|
2061 </tbody>
|
Chris@49
|
2062 </table>
|
Chris@49
|
2063 </ul>
|
Chris@49
|
2064 </li>
|
Chris@49
|
2065 <br>
|
Chris@49
|
2066 <a name="element_access_bounds_check_note"></a>
|
Chris@49
|
2067 <li>
|
Chris@49
|
2068 The bounds checks used by the <i>(n)</i>, <i>(i,j)</i> and <i>(i,j,k)</i> access forms
|
Chris@49
|
2069 can be disabled by defining <a href="#config_hpp_arma_no_debug"><i>ARMA_NO_DEBUG</i></a> or <i>NDEBUG</i> macros
|
Chris@49
|
2070 before including the <i>armadillo</i> header file (eg. <i>#define ARMA_NO_DEBUG</i>).
|
Chris@49
|
2071 Disabling the bounds checks is not recommended until your code has been thoroughly debugged
|
Chris@49
|
2072 -- it's better to write correct code first, and then maximise its speed.
|
Chris@49
|
2073 </li>
|
Chris@49
|
2074 <br>
|
Chris@49
|
2075 <li>
|
Chris@49
|
2076 <b>Note</b>: for <a href="#SpMat">sparse matrices</a>, using element access operators to insert values via loops can be inefficient;
|
Chris@49
|
2077 you may wish to use <a href="#batch_constructors_sp_mat">batch insertion constructors</a> instead
|
Chris@49
|
2078 </li>
|
Chris@49
|
2079 <br>
|
Chris@49
|
2080 <li>
|
Chris@49
|
2081 Examples:
|
Chris@49
|
2082 <ul>
|
Chris@49
|
2083 <pre>
|
Chris@49
|
2084 mat A = randu<mat>(10,10);
|
Chris@49
|
2085 A(9,9) = 123.0;
|
Chris@49
|
2086 double x = A.at(9,9);
|
Chris@49
|
2087 double y = A[99];
|
Chris@49
|
2088
|
Chris@49
|
2089 vec p = randu<vec>(10,1);
|
Chris@49
|
2090 p(9) = 123.0;
|
Chris@49
|
2091 double z = p[9];
|
Chris@49
|
2092 </pre>
|
Chris@49
|
2093 </ul>
|
Chris@49
|
2094 </li>
|
Chris@49
|
2095 <br>
|
Chris@49
|
2096 <li>See also:
|
Chris@49
|
2097 <ul>
|
Chris@49
|
2098 <li><a href="#in_range">.in_range()</a></li>
|
Chris@49
|
2099 <li><a href="#element_initialisation">element initialisation</a></li>
|
Chris@49
|
2100 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
2101 <li><a href="#memptr">.memptr()</a></li>
|
Chris@49
|
2102 <li><a href="#iterators_mat">iterators (matrices)</a></li>
|
Chris@49
|
2103 <li><a href="#iterators_cube">iterators (cubes)</a></li>
|
Chris@49
|
2104 <li><a href="#config_hpp">config.hpp</a></li>
|
Chris@49
|
2105 </ul>
|
Chris@49
|
2106 </li>
|
Chris@49
|
2107 <br>
|
Chris@49
|
2108 </ul>
|
Chris@49
|
2109 <hr class="greyline"><br>
|
Chris@49
|
2110
|
Chris@49
|
2111 <a name="element_initialisation"></a>
|
Chris@49
|
2112 <b>element initialisation</b>
|
Chris@49
|
2113 <ul>
|
Chris@49
|
2114 <li>
|
Chris@49
|
2115 Instances of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>field</i> classes can be initialised via repeated use of the << operator
|
Chris@49
|
2116 </li>
|
Chris@49
|
2117 <br>
|
Chris@49
|
2118 <li>
|
Chris@49
|
2119 Special element <i>endr</i> indicates "end of row" (conceptually similar to <i>std::endl</i>)
|
Chris@49
|
2120 </li>
|
Chris@49
|
2121 <br>
|
Chris@49
|
2122 <li>
|
Chris@49
|
2123 Setting elements via << is a bit slower than directly <a href="#element_access">accessing</a> the elements,
|
Chris@49
|
2124 but code using << is generally more readable as well as being easier to write
|
Chris@49
|
2125 </li>
|
Chris@49
|
2126 <br>
|
Chris@49
|
2127 <li>
|
Chris@49
|
2128 If you have a C++11 compiler, instances of <i>Mat</i>, <i>Col</i> and <i>Row</i> classes can be also initialised via initialiser lists;
|
Chris@49
|
2129 this requires support for the C++11 standard to be <a href="#config_hpp_arma_use_cxx11">explicitly enabled</a>
|
Chris@49
|
2130 </li>
|
Chris@49
|
2131 <br>
|
Chris@49
|
2132 <li>
|
Chris@49
|
2133 Examples:
|
Chris@49
|
2134 <ul>
|
Chris@49
|
2135 <pre>
|
Chris@49
|
2136 mat A;
|
Chris@49
|
2137
|
Chris@49
|
2138 A << 1 << 2 << 3 << endr
|
Chris@49
|
2139 << 4 << 5 << 6 << endr;
|
Chris@49
|
2140
|
Chris@49
|
2141 mat B = { 1, 2, 3, 4, 5, 6 }; // C++11 only
|
Chris@49
|
2142 B.reshape(2,3);
|
Chris@49
|
2143 </pre>
|
Chris@49
|
2144 </ul>
|
Chris@49
|
2145 </li>
|
Chris@49
|
2146 <br>
|
Chris@49
|
2147 <li>
|
Chris@49
|
2148 See also:
|
Chris@49
|
2149 <ul>
|
Chris@49
|
2150 <li><a href="#element_access">element access</a></li>
|
Chris@49
|
2151 <li><a href="#print">.print()</a></li>
|
Chris@49
|
2152 <li><a href="#save_load_mat">saving & loading matrices</a></li>
|
Chris@49
|
2153 <li><a href="#adv_constructors_mat">advanced constructors (matrices)</a></li>
|
Chris@49
|
2154 </ul>
|
Chris@49
|
2155 </li>
|
Chris@49
|
2156 <br>
|
Chris@49
|
2157 </ul>
|
Chris@49
|
2158 <hr class="greyline"><br>
|
Chris@49
|
2159
|
Chris@49
|
2160 <a name="eval_member"></a>
|
Chris@49
|
2161 <b>.eval()</b>
|
Chris@49
|
2162 <br>
|
Chris@49
|
2163 <ul>
|
Chris@49
|
2164 <li>
|
Chris@49
|
2165 Member function of any matrix or vector expression
|
Chris@49
|
2166 </li>
|
Chris@49
|
2167 <br>
|
Chris@49
|
2168 <li>
|
Chris@49
|
2169 Explicitly forces the evaluation of a delayed expression and outputs a matrix
|
Chris@49
|
2170 </li>
|
Chris@49
|
2171 <br>
|
Chris@49
|
2172 <li>
|
Chris@49
|
2173 This function should be used sparingly and only in cases where it is absolutely necessary; indiscriminate use can cause slow downs
|
Chris@49
|
2174 </li>
|
Chris@49
|
2175 <br>
|
Chris@49
|
2176 <li>
|
Chris@49
|
2177 This function was added in version 3.2
|
Chris@49
|
2178 </li>
|
Chris@49
|
2179 <br>
|
Chris@49
|
2180 <li>
|
Chris@49
|
2181 Examples:
|
Chris@49
|
2182 <ul>
|
Chris@49
|
2183 <pre>
|
Chris@49
|
2184 cx_mat A( randu<mat>(4,4), randu<mat>(4,4) );
|
Chris@49
|
2185
|
Chris@49
|
2186 real(A).eval().save("A_real.dat", raw_ascii);
|
Chris@49
|
2187 imag(A).eval().save("A_imag.dat", raw_ascii);
|
Chris@49
|
2188 </pre>
|
Chris@49
|
2189 </ul>
|
Chris@49
|
2190 </li>
|
Chris@49
|
2191 <br>
|
Chris@49
|
2192 <li>See also:
|
Chris@49
|
2193 <ul>
|
Chris@49
|
2194 <li><a href="#Mat">Mat class</a></li>
|
Chris@49
|
2195 </ul>
|
Chris@49
|
2196 </li>
|
Chris@49
|
2197 <br>
|
Chris@49
|
2198 </ul>
|
Chris@49
|
2199 <hr class="greyline"><br>
|
Chris@49
|
2200
|
Chris@49
|
2201 <a name="eye_member"></a>
|
Chris@49
|
2202 <b>.eye()</b>
|
Chris@49
|
2203 <br>
|
Chris@49
|
2204 <b>.eye(n_rows, n_cols)</b>
|
Chris@49
|
2205 <ul>
|
Chris@49
|
2206 <li>
|
Chris@49
|
2207 Set the elements along the main diagonal to one and off-diagonal elements set to zero,
|
Chris@49
|
2208 optionally first resizing to specified dimensions
|
Chris@49
|
2209 </li>
|
Chris@49
|
2210 <br>
|
Chris@49
|
2211 <li>
|
Chris@49
|
2212 An identity matrix is generated when <i>n_rows</i> = <i>n_cols</i>
|
Chris@49
|
2213 </li>
|
Chris@49
|
2214 <br>
|
Chris@49
|
2215 <li>
|
Chris@49
|
2216 Examples:
|
Chris@49
|
2217 <ul>
|
Chris@49
|
2218 <pre>
|
Chris@49
|
2219 mat A(5,5);
|
Chris@49
|
2220 A.eye();
|
Chris@49
|
2221
|
Chris@49
|
2222 mat B;
|
Chris@49
|
2223 B.eye(5,5);
|
Chris@49
|
2224 </pre>
|
Chris@49
|
2225 </ul>
|
Chris@49
|
2226 </li>
|
Chris@49
|
2227 <br>
|
Chris@49
|
2228 <li>See also:
|
Chris@49
|
2229 <ul>
|
Chris@49
|
2230 <li><a href="#ones_member">.ones()</a></li>
|
Chris@49
|
2231 <li><a href="#diag">.diag()</a></li>
|
Chris@49
|
2232 <li><a href="#diagmat">diagmat()</a></li>
|
Chris@49
|
2233 <li><a href="#diagvec">diagvec()</a></li>
|
Chris@49
|
2234 <li><a href="#eye_standalone">eye()</a> (standalone function)</li>
|
Chris@49
|
2235 </ul>
|
Chris@49
|
2236 </li>
|
Chris@49
|
2237 <br>
|
Chris@49
|
2238 </ul>
|
Chris@49
|
2239 <hr class="greyline"><br>
|
Chris@49
|
2240
|
Chris@49
|
2241 <a name="fill"></a>
|
Chris@49
|
2242 <b>.fill(</b>value<b>)</b>
|
Chris@49
|
2243 <ul>
|
Chris@49
|
2244 <li>
|
Chris@49
|
2245 Member function of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i> classes.
|
Chris@49
|
2246 </li>
|
Chris@49
|
2247 <br>
|
Chris@49
|
2248 <li>Sets the elements to a specified value</li>
|
Chris@49
|
2249 <br>
|
Chris@49
|
2250 <li>the type of value must match the type of elements used by the container object (eg. for <i>mat</i> the type is double)
|
Chris@49
|
2251 </li>
|
Chris@49
|
2252 <br>
|
Chris@49
|
2253 <li>
|
Chris@49
|
2254 Examples:
|
Chris@49
|
2255 <ul>
|
Chris@49
|
2256 <pre>
|
Chris@49
|
2257 mat A(5,5);
|
Chris@49
|
2258 A.fill(123.0);
|
Chris@49
|
2259 </pre>
|
Chris@49
|
2260 </ul>
|
Chris@49
|
2261 </li>
|
Chris@49
|
2262 <br>
|
Chris@49
|
2263 <li>
|
Chris@49
|
2264 See also:
|
Chris@49
|
2265 <ul>
|
Chris@49
|
2266 <li><a href="#imbue">.imbue()</a></li>
|
Chris@49
|
2267 <li><a href="#ones_member">.ones()</a></li>
|
Chris@49
|
2268 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
2269 <li><a href="#randu_randn_member">.randu() & .randn()</a></li>
|
Chris@49
|
2270 </ul>
|
Chris@49
|
2271 </li>
|
Chris@49
|
2272 <br>
|
Chris@49
|
2273 </ul>
|
Chris@49
|
2274 <hr class="greyline"><br>
|
Chris@49
|
2275
|
Chris@49
|
2276 <a name="i_member"></a>
|
Chris@49
|
2277 <b>.i(</b> <i>slow=false</i> <b>)</b>
|
Chris@49
|
2278 <ul>
|
Chris@49
|
2279 <li>
|
Chris@49
|
2280 Member function of any matrix expression
|
Chris@49
|
2281 </li>
|
Chris@49
|
2282 <br>
|
Chris@49
|
2283 <li>
|
Chris@49
|
2284 Provides an inverse of the matrix expression
|
Chris@49
|
2285 </li>
|
Chris@49
|
2286 <br>
|
Chris@49
|
2287 <li>the <i>slow</i> argument is optional</li>
|
Chris@49
|
2288 <br>
|
Chris@49
|
2289 <li>
|
Chris@49
|
2290 If the matrix expression is not square, a <i>std::logic_error</i> exception is thrown
|
Chris@49
|
2291 </li>
|
Chris@49
|
2292 <br>
|
Chris@49
|
2293 <li>
|
Chris@49
|
2294 If the matrix expression appears to be singular, the output matrix is reset and a <i>std::runtime_error</i> exception is thrown
|
Chris@49
|
2295 </li>
|
Chris@49
|
2296 <br>
|
Chris@49
|
2297 <li>
|
Chris@49
|
2298 For matrix sizes ≤ 4x4, a fast inverse algorithm is used by default.
|
Chris@49
|
2299 In rare instances, the fast algorithm might be less precise than the standard algorithm.
|
Chris@49
|
2300 To force the use of the standard algorithm, set the <i>slow</i> argument to <i>true</i>
|
Chris@49
|
2301 </li>
|
Chris@49
|
2302 <br>
|
Chris@49
|
2303 <li>
|
Chris@49
|
2304 <b>NOTE:</b> in many cases it is more efficient/faster to use the <a href="#solve">solve()</a> function instead of performing a matrix inverse
|
Chris@49
|
2305 </li>
|
Chris@49
|
2306 <br>
|
Chris@49
|
2307 <li>
|
Chris@49
|
2308 This function was added in version 3.0
|
Chris@49
|
2309 </li>
|
Chris@49
|
2310 <br>
|
Chris@49
|
2311 <li>
|
Chris@49
|
2312 Examples:
|
Chris@49
|
2313 <ul>
|
Chris@49
|
2314 <pre>
|
Chris@49
|
2315 mat A = randu<mat>(4,4);
|
Chris@49
|
2316
|
Chris@49
|
2317 mat X = A.i();
|
Chris@49
|
2318 mat Y = (A+A).i();
|
Chris@49
|
2319
|
Chris@49
|
2320 mat B = randu<mat>(4,1);
|
Chris@49
|
2321 mat Z = A.i() * B; // automatically converted to Z=solve(A,B)
|
Chris@49
|
2322
|
Chris@49
|
2323 </pre>
|
Chris@49
|
2324 </ul>
|
Chris@49
|
2325 </li>
|
Chris@49
|
2326 <li>
|
Chris@49
|
2327 See also:
|
Chris@49
|
2328 <ul>
|
Chris@49
|
2329 <li><a href="#inv">inv()</a></li>
|
Chris@49
|
2330 <li><a href="#pinv">pinv()</a></li>
|
Chris@49
|
2331 <li><a href="#solve">solve()</a></li>
|
Chris@49
|
2332 </ul>
|
Chris@49
|
2333 </li>
|
Chris@49
|
2334 <br>
|
Chris@49
|
2335 </ul>
|
Chris@49
|
2336 <hr class="greyline"><br>
|
Chris@49
|
2337
|
Chris@49
|
2338 <a name="in_range"></a>
|
Chris@49
|
2339 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
2340 <tbody>
|
Chris@49
|
2341 <tr>
|
Chris@49
|
2342 <td style="vertical-align: top;"><b>.in_range(</b> i <b>)</b></td>
|
Chris@49
|
2343 <td style="vertical-align: top;"><br>
|
Chris@49
|
2344 </td>
|
Chris@49
|
2345 <td style="vertical-align: top;">(member of <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i> and <i>field</i>)
|
Chris@49
|
2346 </td>
|
Chris@49
|
2347 </tr>
|
Chris@49
|
2348 <tr>
|
Chris@49
|
2349 <td style="vertical-align: top;"><b>.in_range( span(</b>start<b>,</b> end<b>) )</b></td>
|
Chris@49
|
2350 <td style="vertical-align: top;"><br>
|
Chris@49
|
2351 </td>
|
Chris@49
|
2352 <td style="vertical-align: top;">(member of <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i> and <i>field</i>)
|
Chris@49
|
2353 </td>
|
Chris@49
|
2354 </tr>
|
Chris@49
|
2355 <tr>
|
Chris@49
|
2356 <td>
|
Chris@49
|
2357
|
Chris@49
|
2358 </td>
|
Chris@49
|
2359 </tr>
|
Chris@49
|
2360 <tr>
|
Chris@49
|
2361 <td style="vertical-align: top;"><b>.in_range(</b> row<b>,</b> col <b>)</b></td>
|
Chris@49
|
2362 <td style="vertical-align: top;"><br>
|
Chris@49
|
2363 </td>
|
Chris@49
|
2364 <td style="vertical-align: top;">(member of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>field</i>)
|
Chris@49
|
2365 </td>
|
Chris@49
|
2366 </tr>
|
Chris@49
|
2367 <tr>
|
Chris@49
|
2368 <td style="vertical-align: top;"><b>.in_range( <font size=-1>span(</b>start_row<b>,</b> end_row<b>), span(</b>start_col<b>,</b> end_col<b>)</font> )</b></td>
|
Chris@49
|
2369 <td style="vertical-align: top;"><br>
|
Chris@49
|
2370 </td>
|
Chris@49
|
2371 <td style="vertical-align: top;">(member of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>field</i>)
|
Chris@49
|
2372 </td>
|
Chris@49
|
2373 </tr>
|
Chris@49
|
2374 <tr>
|
Chris@49
|
2375 <td>
|
Chris@49
|
2376
|
Chris@49
|
2377 </td>
|
Chris@49
|
2378 </tr>
|
Chris@49
|
2379 <tr>
|
Chris@49
|
2380 <td style="vertical-align: top;"><b>.in_range(</b> row<b>,</b> col<b>,</b> slice <b>)</b></td>
|
Chris@49
|
2381 <td style="vertical-align: top;"><br>
|
Chris@49
|
2382 </td>
|
Chris@49
|
2383 <td style="vertical-align: top;">(member of <i>Cube</i>)
|
Chris@49
|
2384 </td>
|
Chris@49
|
2385 </tr>
|
Chris@49
|
2386 <tr>
|
Chris@49
|
2387 <td style="vertical-align: top;"><b>.in_range( <font size=-1>span(</b>start_row<b>,</b> end_row<b>), span(</b>start_col<b>,</b> end_col<b>), span(</b>start_slice<b>,</b> end_slice<b>)</font> )</b></td>
|
Chris@49
|
2388 <td style="vertical-align: top;"><br>
|
Chris@49
|
2389 </td>
|
Chris@49
|
2390 <td style="vertical-align: top;">(member of <i>Cube</i>)
|
Chris@49
|
2391 </td>
|
Chris@49
|
2392 </tr>
|
Chris@49
|
2393 </tbody>
|
Chris@49
|
2394 </table>
|
Chris@49
|
2395 <br>
|
Chris@49
|
2396 <ul>
|
Chris@49
|
2397 <li>Returns <i>true</i> if the given location or span is currently valid
|
Chris@49
|
2398 </li>
|
Chris@49
|
2399 <br>
|
Chris@49
|
2400 <li>Returns <i>false</i> if the object is empty, the location is out of bounds, or the span is out of bounds
|
Chris@49
|
2401 </li>
|
Chris@49
|
2402 <br>
|
Chris@49
|
2403 <li>
|
Chris@49
|
2404 Instances of <i>span(a,b)</i> can be replaced by:
|
Chris@49
|
2405 <ul>
|
Chris@49
|
2406 <li><i>span()</i> or <i>span::all</i>, to indicate the entire range</li>
|
Chris@49
|
2407 <li><i>span(a)</i>, to indicate a particular row, column or slice</li>
|
Chris@49
|
2408 </ul>
|
Chris@49
|
2409 </li>
|
Chris@49
|
2410 <br>
|
Chris@49
|
2411 <li>
|
Chris@49
|
2412 Examples:
|
Chris@49
|
2413 <ul>
|
Chris@49
|
2414 <pre>
|
Chris@49
|
2415 mat A = randu<mat>(4,5);
|
Chris@49
|
2416
|
Chris@49
|
2417 cout << A.in_range(0,0) << endl; // true
|
Chris@49
|
2418 cout << A.in_range(3,4) << endl; // true
|
Chris@49
|
2419 cout << A.in_range(4,5) << endl; // false
|
Chris@49
|
2420 </pre>
|
Chris@49
|
2421 </ul>
|
Chris@49
|
2422 </li>
|
Chris@49
|
2423 <br>
|
Chris@49
|
2424 <li>
|
Chris@49
|
2425 See also:
|
Chris@49
|
2426 <ul>
|
Chris@49
|
2427 <li><a href="#element_access">element access</a></li>
|
Chris@49
|
2428 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
2429 <li><a href="#subcube">subcube views</a></li>
|
Chris@49
|
2430 <li><a href="#subfield">subfield views</a></li>
|
Chris@49
|
2431 <li><a href="#set_size">.set_size()</a></li>
|
Chris@49
|
2432 </ul>
|
Chris@49
|
2433 </li>
|
Chris@49
|
2434 <br>
|
Chris@49
|
2435 </ul>
|
Chris@49
|
2436 <hr class="greyline"><br>
|
Chris@49
|
2437
|
Chris@49
|
2438 <a name="is_empty"></a>
|
Chris@49
|
2439 <b>.is_empty()</b>
|
Chris@49
|
2440 <ul>
|
Chris@49
|
2441 <li>
|
Chris@49
|
2442 Member function of <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i> and <i>field</i> classes
|
Chris@49
|
2443 </li>
|
Chris@49
|
2444 <br>
|
Chris@49
|
2445 <li>Returns true if the object has no elements
|
Chris@49
|
2446 </li>
|
Chris@49
|
2447 <br>
|
Chris@49
|
2448 <li>Returns false if the object has one or more elements
|
Chris@49
|
2449 </li>
|
Chris@49
|
2450 <br>
|
Chris@49
|
2451 <li>
|
Chris@49
|
2452 Examples:
|
Chris@49
|
2453 <ul>
|
Chris@49
|
2454 <pre>
|
Chris@49
|
2455 mat A = randu<mat>(5,5);
|
Chris@49
|
2456 cout << A.is_empty() << endl;
|
Chris@49
|
2457
|
Chris@49
|
2458 A.reset();
|
Chris@49
|
2459 cout << A.is_empty() << endl;
|
Chris@49
|
2460 </pre>
|
Chris@49
|
2461 </ul>
|
Chris@49
|
2462 </li>
|
Chris@49
|
2463 <br>
|
Chris@49
|
2464 <li>
|
Chris@49
|
2465 See also:
|
Chris@49
|
2466 <ul>
|
Chris@49
|
2467 <li><a href="#is_square">.is_square()</a></li>
|
Chris@49
|
2468 <li><a href="#is_vec">.is_vec()</a></li>
|
Chris@49
|
2469 <li><a href="#is_finite">.is_finite()</a></li>
|
Chris@49
|
2470 <li><a href="#reset">.reset()</a></li>
|
Chris@49
|
2471 </ul>
|
Chris@49
|
2472 </li>
|
Chris@49
|
2473 <br>
|
Chris@49
|
2474 </ul>
|
Chris@49
|
2475 <hr class="greyline"><br>
|
Chris@49
|
2476
|
Chris@49
|
2477 <a name="is_finite"></a>
|
Chris@49
|
2478 <b>.is_finite()</b>
|
Chris@49
|
2479 <ul>
|
Chris@49
|
2480 <li>
|
Chris@49
|
2481 Member function of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i> classes
|
Chris@49
|
2482 </li>
|
Chris@49
|
2483 <br>
|
Chris@49
|
2484 <li>Returns <i>true</i> if all elements of the object are finite
|
Chris@49
|
2485 </li>
|
Chris@49
|
2486 <br>
|
Chris@49
|
2487 <li>Returns <i>false</i> if at least one of the elements of the object is non-finite (±infinity or NaN)
|
Chris@49
|
2488 </li>
|
Chris@49
|
2489 <br>
|
Chris@49
|
2490 <li>
|
Chris@49
|
2491 Examples:
|
Chris@49
|
2492 <ul>
|
Chris@49
|
2493 <pre>
|
Chris@49
|
2494 mat A = randu<mat>(5,5);
|
Chris@49
|
2495 mat B = randu<mat>(5,5);
|
Chris@49
|
2496
|
Chris@49
|
2497 B(1,1) = datum::nan;
|
Chris@49
|
2498
|
Chris@49
|
2499 cout << A.is_finite() << endl;
|
Chris@49
|
2500 cout << B.is_finite() << endl;
|
Chris@49
|
2501 </pre>
|
Chris@49
|
2502 </ul>
|
Chris@49
|
2503 </li>
|
Chris@49
|
2504 <br>
|
Chris@49
|
2505 <li>
|
Chris@49
|
2506 See also:
|
Chris@49
|
2507 <ul>
|
Chris@49
|
2508 <li><a href="#constants">datum::nan</a></li>
|
Chris@49
|
2509 <li><a href="#constants">datum::inf</a></li>
|
Chris@49
|
2510 <li><a href="#is_finite_standalone">is_finite()</a> (standalone function)</li>
|
Chris@49
|
2511 </ul>
|
Chris@49
|
2512 </li>
|
Chris@49
|
2513 <br>
|
Chris@49
|
2514 </ul>
|
Chris@49
|
2515 <hr class="greyline"><br>
|
Chris@49
|
2516
|
Chris@49
|
2517 <a name="is_square"></a>
|
Chris@49
|
2518 <b>.is_square()</b>
|
Chris@49
|
2519 <ul>
|
Chris@49
|
2520 <li>
|
Chris@49
|
2521 Member function of the <i>Mat</i> class
|
Chris@49
|
2522 </li>
|
Chris@49
|
2523 <br>
|
Chris@49
|
2524 <li>Returns <i>true</i> if the matrix is square, ie., number of rows is equal to the number of columns
|
Chris@49
|
2525 </li>
|
Chris@49
|
2526 <br>
|
Chris@49
|
2527 <li>Returns <i>false</i> if the matrix is not square
|
Chris@49
|
2528 </li>
|
Chris@49
|
2529 <br>
|
Chris@49
|
2530 <li>
|
Chris@49
|
2531 Examples:
|
Chris@49
|
2532 <ul>
|
Chris@49
|
2533 <pre>
|
Chris@49
|
2534 mat A = randu<mat>(5,5);
|
Chris@49
|
2535 mat B = randu<mat>(6,7);
|
Chris@49
|
2536
|
Chris@49
|
2537 cout << A.is_square() << endl;
|
Chris@49
|
2538 cout << B.is_square() << endl;
|
Chris@49
|
2539 </pre>
|
Chris@49
|
2540 </ul>
|
Chris@49
|
2541 </li>
|
Chris@49
|
2542 <br>
|
Chris@49
|
2543 <li>
|
Chris@49
|
2544 See also:
|
Chris@49
|
2545 <ul>
|
Chris@49
|
2546 <li><a href="#is_empty">.is_empty()</a></li>
|
Chris@49
|
2547 <li><a href="#is_vec">.is_vec()</a></li>
|
Chris@49
|
2548 <li><a href="#is_finite">.is_finite()</a></li>
|
Chris@49
|
2549 </ul>
|
Chris@49
|
2550 </li>
|
Chris@49
|
2551 </ul>
|
Chris@49
|
2552 <br>
|
Chris@49
|
2553 <hr class="greyline"><br>
|
Chris@49
|
2554
|
Chris@49
|
2555 <a name="is_vec"></a>
|
Chris@49
|
2556 <b>.is_vec()</b>
|
Chris@49
|
2557 <br><b>.is_colvec()</b>
|
Chris@49
|
2558 <br><b>.is_rowvec()</b>
|
Chris@49
|
2559 <ul>
|
Chris@49
|
2560 <li>
|
Chris@49
|
2561 Member functions of the <i>Mat</i> class
|
Chris@49
|
2562 </li>
|
Chris@49
|
2563 <br>
|
Chris@49
|
2564
|
Chris@49
|
2565 <li>.is_vec():
|
Chris@49
|
2566 <ul>
|
Chris@49
|
2567 <li>Returns <i>true</i> if the matrix can be interpreted as a vector (either column or row vector)
|
Chris@49
|
2568 </li>
|
Chris@49
|
2569 <li>Returns <i>false</i> if the matrix does not have exactly one column or one row
|
Chris@49
|
2570 </li>
|
Chris@49
|
2571 </ul>
|
Chris@49
|
2572 </li>
|
Chris@49
|
2573 <br>
|
Chris@49
|
2574
|
Chris@49
|
2575 <li>.is_colvec():
|
Chris@49
|
2576 <ul>
|
Chris@49
|
2577 <li>Returns <i>true</i> if the matrix can be interpreted as a column vector
|
Chris@49
|
2578 </li>
|
Chris@49
|
2579 <li>Returns <i>false</i> if the matrix does not have exactly one column
|
Chris@49
|
2580 </li>
|
Chris@49
|
2581 </ul>
|
Chris@49
|
2582 </li>
|
Chris@49
|
2583 <br>
|
Chris@49
|
2584
|
Chris@49
|
2585 <li>.is_rowvec():
|
Chris@49
|
2586 <ul>
|
Chris@49
|
2587 <li>Returns <i>true</i> if the matrix can be interpreted as a row vector
|
Chris@49
|
2588 </li>
|
Chris@49
|
2589 <li>Returns <i>false</i> if the matrix does not have exactly one row
|
Chris@49
|
2590 </li>
|
Chris@49
|
2591 </ul>
|
Chris@49
|
2592 </li>
|
Chris@49
|
2593 <br>
|
Chris@49
|
2594
|
Chris@49
|
2595 <li><b>Caveat:</b> do not assume that the vector has elements if these functions return <i>true</i> -- it is possible to have an empty vector (eg. 0x1)
|
Chris@49
|
2596 </li>
|
Chris@49
|
2597 <br>
|
Chris@49
|
2598 <li>
|
Chris@49
|
2599 Examples:
|
Chris@49
|
2600 <ul>
|
Chris@49
|
2601 <pre>
|
Chris@49
|
2602 mat A = randu<mat>(1,5);
|
Chris@49
|
2603 mat B = randu<mat>(5,1);
|
Chris@49
|
2604 mat C = randu<mat>(5,5);
|
Chris@49
|
2605
|
Chris@49
|
2606 cout << A.is_vec() << endl;
|
Chris@49
|
2607 cout << B.is_vec() << endl;
|
Chris@49
|
2608 cout << C.is_vec() << endl;
|
Chris@49
|
2609 </pre>
|
Chris@49
|
2610 </ul>
|
Chris@49
|
2611 </li>
|
Chris@49
|
2612 <br>
|
Chris@49
|
2613 <li>
|
Chris@49
|
2614 See also:
|
Chris@49
|
2615 <ul>
|
Chris@49
|
2616 <li><a href="#is_empty">.is_empty()</a></li>
|
Chris@49
|
2617 <li><a href="#is_square">.is_square()</a></li>
|
Chris@49
|
2618 <li><a href="#is_finite">.is_finite()</a></li>
|
Chris@49
|
2619 </ul>
|
Chris@49
|
2620 </li>
|
Chris@49
|
2621 </ul>
|
Chris@49
|
2622 <br>
|
Chris@49
|
2623 <hr class="greyline"><br>
|
Chris@49
|
2624
|
Chris@49
|
2625 <a name="imbue"></a>
|
Chris@49
|
2626 <b>.imbue( </b>functor<b> )</b>
|
Chris@49
|
2627 <br>
|
Chris@49
|
2628 <b>.imbue( </b>lambda function<b> )</b> <i>(C++11 only)</i>
|
Chris@49
|
2629 <br>
|
Chris@49
|
2630 <ul>
|
Chris@49
|
2631 <li>
|
Chris@49
|
2632 Imbue (fill) with values provided by a functor or lambda function
|
Chris@49
|
2633 </li>
|
Chris@49
|
2634 <br>
|
Chris@49
|
2635 <li>
|
Chris@49
|
2636 For matrices, filling is done column-by-column (ie. column 0 is filled, then column 1, ...)
|
Chris@49
|
2637 </li>
|
Chris@49
|
2638 <br>
|
Chris@49
|
2639 <li>
|
Chris@49
|
2640 For cubes, filling is done slice-by-slice; each slice is filled column-by-column
|
Chris@49
|
2641 </li>
|
Chris@49
|
2642 <br>
|
Chris@49
|
2643 <li>
|
Chris@49
|
2644 This function was added in version 3.800
|
Chris@49
|
2645 </li>
|
Chris@49
|
2646 <br>
|
Chris@49
|
2647 <li>
|
Chris@49
|
2648 Examples:
|
Chris@49
|
2649 <ul>
|
Chris@49
|
2650 <pre>
|
Chris@49
|
2651 // C++11 only example
|
Chris@49
|
2652 // need to include <random>
|
Chris@49
|
2653
|
Chris@49
|
2654 std::mt19937 engine; // Mersenne twister random number engine
|
Chris@49
|
2655
|
Chris@49
|
2656 std::uniform_real_distribution<double> distr(0.0, 1.0);
|
Chris@49
|
2657
|
Chris@49
|
2658 mat A(4,5);
|
Chris@49
|
2659
|
Chris@49
|
2660 A.imbue( [&]() { return distr(engine); } );
|
Chris@49
|
2661 </pre>
|
Chris@49
|
2662 </ul>
|
Chris@49
|
2663 </li>
|
Chris@49
|
2664 <br>
|
Chris@49
|
2665 <li>
|
Chris@49
|
2666 See also:
|
Chris@49
|
2667 <ul>
|
Chris@49
|
2668 <li><a href="#fill">.fill()</a></li>
|
Chris@49
|
2669 <li><a href="#transform">.transform()</a></li>
|
Chris@49
|
2670 <li><a href="http://en.wikipedia.org/wiki/Function_object">function object</a> at Wikipedia</li>
|
Chris@49
|
2671 <li><a href="http://en.wikipedia.org/wiki/C%2B%2B11#Lambda_functions_and_expressions">C++11 lambda functions</a> at Wikipedia</li>
|
Chris@49
|
2672 <li><a href="http://www.cprogramming.com/c++11/c++11-lambda-closures.html">lambda function</a> at cprogramming.com</li>
|
Chris@49
|
2673 </ul>
|
Chris@49
|
2674 </li>
|
Chris@49
|
2675 <br>
|
Chris@49
|
2676 </ul>
|
Chris@49
|
2677 <hr class="greyline"><br>
|
Chris@49
|
2678
|
Chris@49
|
2679 <a name="insert"></a>
|
Chris@49
|
2680 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
2681 <tbody>
|
Chris@49
|
2682 <tr>
|
Chris@49
|
2683 <td style="vertical-align: top;">
|
Chris@49
|
2684 <b>.insert_rows( </b>row_number, X<b> )</b>
|
Chris@49
|
2685 <br>
|
Chris@49
|
2686 <b>.insert_rows( </b>row_number, number_of_rows, set_to_zero = true<b> )</b>
|
Chris@49
|
2687 </td>
|
Chris@49
|
2688 <td style="vertical-align: top;"><br></td>
|
Chris@49
|
2689 <td style="vertical-align: top;">(member functions of <i>Mat</i> and <i>Col</i>)
|
Chris@49
|
2690 </td>
|
Chris@49
|
2691 </tr>
|
Chris@49
|
2692 <tr>
|
Chris@49
|
2693 <td> </td>
|
Chris@49
|
2694 </tr>
|
Chris@49
|
2695 <tr>
|
Chris@49
|
2696 <td style="vertical-align: top;">
|
Chris@49
|
2697 <b>.insert_cols( </b>col_number, X<b> )</b>
|
Chris@49
|
2698 <br>
|
Chris@49
|
2699 <b>.insert_cols( </b>col_number, number_of_cols, set_to_zero = true<b> )</b>
|
Chris@49
|
2700 </td>
|
Chris@49
|
2701 <td style="vertical-align: top;"><br></td>
|
Chris@49
|
2702 <td style="vertical-align: top;">(member functions of <i>Mat</i> and <i>Row</i>)
|
Chris@49
|
2703 </td>
|
Chris@49
|
2704 </tr>
|
Chris@49
|
2705 <tr>
|
Chris@49
|
2706 <td> </td>
|
Chris@49
|
2707 </tr>
|
Chris@49
|
2708 <tr>
|
Chris@49
|
2709 <td style="vertical-align: top;">
|
Chris@49
|
2710 <b>.insert_slices( </b>slice_number, X<b> )</b>
|
Chris@49
|
2711 <br>
|
Chris@49
|
2712 <b>.insert_slices( </b>slice_number, number_of_slices, set_to_zero = true<b> )</b>
|
Chris@49
|
2713 </td>
|
Chris@49
|
2714 <td style="vertical-align: top;"><br></td>
|
Chris@49
|
2715 <td style="vertical-align: top;">(member functions of <i>Cube</i>)
|
Chris@49
|
2716 </td>
|
Chris@49
|
2717 </tr>
|
Chris@49
|
2718 </tbody>
|
Chris@49
|
2719 </table>
|
Chris@49
|
2720 <br>
|
Chris@49
|
2721 <ul>
|
Chris@49
|
2722 <li>
|
Chris@49
|
2723 Functions with the <i>X</i> argument: insert a copy of X at the specified row/column/slice
|
Chris@49
|
2724 <ul>
|
Chris@49
|
2725 <li>if inserting rows, X must have the same number of columns as the recipient object</li>
|
Chris@49
|
2726 <li>if inserting columns, X must have the same number of rows as the recipient object</li>
|
Chris@49
|
2727 <li>if inserting slices, X must have the same number of rows and columns as the recipient object (ie. all slices must have the same size)</li>
|
Chris@49
|
2728 </ul>
|
Chris@49
|
2729 </li>
|
Chris@49
|
2730 <br>
|
Chris@49
|
2731 <li>
|
Chris@49
|
2732 Functions with the <i>number_of_...</i> argument: expand the object by creating new rows/columns/slices.
|
Chris@49
|
2733 By default, the new rows/columns/slices are set to zero.
|
Chris@49
|
2734 If <i>set_to_zero</i> is <i>false</i>, the memory used by the new rows/columns/slices will not be initialised.
|
Chris@49
|
2735 </li>
|
Chris@49
|
2736 <br>
|
Chris@49
|
2737 <li>
|
Chris@49
|
2738 Examples:
|
Chris@49
|
2739 <ul>
|
Chris@49
|
2740 <pre>
|
Chris@49
|
2741 mat A = randu<mat>(5,10);
|
Chris@49
|
2742 mat B = ones<mat>(5,2);
|
Chris@49
|
2743
|
Chris@49
|
2744 // at column 2, insert a copy of B;
|
Chris@49
|
2745 // A will now have 12 columns
|
Chris@49
|
2746 A.insert_cols(2, B);
|
Chris@49
|
2747
|
Chris@49
|
2748 // at column 1, insert 5 zeroed columns;
|
Chris@49
|
2749 // B will now have 7 columns
|
Chris@49
|
2750 B.insert_cols(1, 5);
|
Chris@49
|
2751 </pre>
|
Chris@49
|
2752 </ul>
|
Chris@49
|
2753 </li>
|
Chris@49
|
2754 <br>
|
Chris@49
|
2755 <li>
|
Chris@49
|
2756 See also:
|
Chris@49
|
2757 <ul>
|
Chris@49
|
2758 <li><a href="#shed">shed rows/columns/slices</a></li>
|
Chris@49
|
2759 <li><a href="#join">join rows/columns/slices</a></li>
|
Chris@49
|
2760 <li><a href="#resize_member">.resize()</a></li>
|
Chris@49
|
2761 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
2762 <li><a href="#subcube">subcube views</a></li>
|
Chris@49
|
2763 </ul>
|
Chris@49
|
2764 </li>
|
Chris@49
|
2765 <br>
|
Chris@49
|
2766 </ul>
|
Chris@49
|
2767 <hr class="greyline"><br>
|
Chris@49
|
2768
|
Chris@49
|
2769 <a name="iterators_mat"></a>
|
Chris@49
|
2770 <b>iterators (matrices & vectors)</b>
|
Chris@49
|
2771 <ul>
|
Chris@49
|
2772 <li>
|
Chris@49
|
2773 STL-style iterators and associated member functions of the <i>Mat</i>, <i>Col</i> and <i>Row</i> classes
|
Chris@49
|
2774 </li>
|
Chris@49
|
2775 <br>
|
Chris@49
|
2776 <li>
|
Chris@49
|
2777 iterator types:
|
Chris@49
|
2778 <br>
|
Chris@49
|
2779 <br>
|
Chris@49
|
2780 <ul>
|
Chris@49
|
2781 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
2782 <tbody>
|
Chris@49
|
2783 <tr>
|
Chris@49
|
2784 <td style="vertical-align: top;">
|
Chris@49
|
2785 <b>mat::iterator</b>
|
Chris@49
|
2786 <br>
|
Chris@49
|
2787 <b>vec::iterator</b>
|
Chris@49
|
2788 <br>
|
Chris@49
|
2789 <b>rowvec::iterator</b>
|
Chris@49
|
2790 </td>
|
Chris@49
|
2791 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2792 </td>
|
Chris@49
|
2793 <td style="vertical-align: top;">
|
Chris@49
|
2794 random access iterators, for read/write access to elements
|
Chris@49
|
2795 (which are stored column by column)
|
Chris@49
|
2796 </td>
|
Chris@49
|
2797 </tr>
|
Chris@49
|
2798 <tr>
|
Chris@49
|
2799 <td style="vertical-align: top;">
|
Chris@49
|
2800
|
Chris@49
|
2801 </td>
|
Chris@49
|
2802 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2803 </td>
|
Chris@49
|
2804 <td style="vertical-align: top;">
|
Chris@49
|
2805
|
Chris@49
|
2806 </td>
|
Chris@49
|
2807 </tr>
|
Chris@49
|
2808 <tr>
|
Chris@49
|
2809 <td style="vertical-align: top;">
|
Chris@49
|
2810 <b>mat::const_iterator</b>
|
Chris@49
|
2811 <br>
|
Chris@49
|
2812 <b>vec::const_iterator</b>
|
Chris@49
|
2813 <br>
|
Chris@49
|
2814 <b>rowvec::const_iterator</b>
|
Chris@49
|
2815 </td>
|
Chris@49
|
2816 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2817 </td>
|
Chris@49
|
2818 <td style="vertical-align: top;">
|
Chris@49
|
2819 random access iterators, for read-only access to elements
|
Chris@49
|
2820 (which are stored column by column)
|
Chris@49
|
2821 </td>
|
Chris@49
|
2822 </tr>
|
Chris@49
|
2823 <tr>
|
Chris@49
|
2824 <td style="vertical-align: top;">
|
Chris@49
|
2825
|
Chris@49
|
2826 </td>
|
Chris@49
|
2827 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2828 </td>
|
Chris@49
|
2829 <td style="vertical-align: top;">
|
Chris@49
|
2830
|
Chris@49
|
2831 </td>
|
Chris@49
|
2832 </tr>
|
Chris@49
|
2833 <tr>
|
Chris@49
|
2834 <td style="vertical-align: top;">
|
Chris@49
|
2835 <b>mat::col_iterator</b>
|
Chris@49
|
2836 <br>
|
Chris@49
|
2837 <b>vec::col_iterator</b>
|
Chris@49
|
2838 <br>
|
Chris@49
|
2839 <b>rowvec::col_iterator</b>
|
Chris@49
|
2840 </td>
|
Chris@49
|
2841 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2842 </td>
|
Chris@49
|
2843 <td style="vertical-align: top;">
|
Chris@49
|
2844 random access iterators, for read/write access to the elements of a specific column
|
Chris@49
|
2845 </td>
|
Chris@49
|
2846 </tr>
|
Chris@49
|
2847 <tr>
|
Chris@49
|
2848 <td style="vertical-align: top;">
|
Chris@49
|
2849
|
Chris@49
|
2850 </td>
|
Chris@49
|
2851 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2852 </td>
|
Chris@49
|
2853 <td style="vertical-align: top;">
|
Chris@49
|
2854
|
Chris@49
|
2855 </td>
|
Chris@49
|
2856 </tr>
|
Chris@49
|
2857 <tr>
|
Chris@49
|
2858 <td style="vertical-align: top;">
|
Chris@49
|
2859 <b>mat::const_col_iterator</b>
|
Chris@49
|
2860 <br>
|
Chris@49
|
2861 <b>vec::const_col_iterator</b>
|
Chris@49
|
2862 <br>
|
Chris@49
|
2863 <b>rowvec::const_col_iterator</b>
|
Chris@49
|
2864 </td>
|
Chris@49
|
2865 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2866 </td>
|
Chris@49
|
2867 <td style="vertical-align: top;">
|
Chris@49
|
2868 random access iterators, for read-only access to the elements of a specific column
|
Chris@49
|
2869 </td>
|
Chris@49
|
2870 </tr>
|
Chris@49
|
2871 <tr>
|
Chris@49
|
2872 <td style="vertical-align: top;">
|
Chris@49
|
2873
|
Chris@49
|
2874 </td>
|
Chris@49
|
2875 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2876 </td>
|
Chris@49
|
2877 <td style="vertical-align: top;">
|
Chris@49
|
2878
|
Chris@49
|
2879 </td>
|
Chris@49
|
2880 </tr>
|
Chris@49
|
2881 <tr>
|
Chris@49
|
2882 <td style="vertical-align: top;">
|
Chris@49
|
2883 <b>mat::row_iterator</b>
|
Chris@49
|
2884 </td>
|
Chris@49
|
2885 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2886 </td>
|
Chris@49
|
2887 <td style="vertical-align: top;">
|
Chris@49
|
2888 rudimentary forward iterator, for read/write access to the elements of a specific row
|
Chris@49
|
2889 </td>
|
Chris@49
|
2890 </tr>
|
Chris@49
|
2891 <tr>
|
Chris@49
|
2892 <td style="vertical-align: top;">
|
Chris@49
|
2893
|
Chris@49
|
2894 </td>
|
Chris@49
|
2895 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2896 </td>
|
Chris@49
|
2897 <td style="vertical-align: top;">
|
Chris@49
|
2898
|
Chris@49
|
2899 </td>
|
Chris@49
|
2900 </tr>
|
Chris@49
|
2901 <tr>
|
Chris@49
|
2902 <td style="vertical-align: top;">
|
Chris@49
|
2903 <b>mat::const_row_iterator</b>
|
Chris@49
|
2904 </td>
|
Chris@49
|
2905 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2906 </td>
|
Chris@49
|
2907 <td style="vertical-align: top;">
|
Chris@49
|
2908 rudimentary forward iterator, for read-only access to the elements of a specific row
|
Chris@49
|
2909 </td>
|
Chris@49
|
2910 </tr>
|
Chris@49
|
2911 <tr>
|
Chris@49
|
2912 <td style="vertical-align: top;">
|
Chris@49
|
2913
|
Chris@49
|
2914 </td>
|
Chris@49
|
2915 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2916 </td>
|
Chris@49
|
2917 <td style="vertical-align: top;">
|
Chris@49
|
2918
|
Chris@49
|
2919 </td>
|
Chris@49
|
2920 </tr>
|
Chris@49
|
2921 <tr>
|
Chris@49
|
2922 <td style="vertical-align: top;">
|
Chris@49
|
2923 <b>vec::row_iterator</b>
|
Chris@49
|
2924 <br>
|
Chris@49
|
2925 <b>rowvec::row_iterator</b>
|
Chris@49
|
2926 </td>
|
Chris@49
|
2927 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2928 </td>
|
Chris@49
|
2929 <td style="vertical-align: top;">
|
Chris@49
|
2930 random access iterators, for read/write access to the elements of a specific row
|
Chris@49
|
2931 </td>
|
Chris@49
|
2932 </tr>
|
Chris@49
|
2933 <tr>
|
Chris@49
|
2934 <td style="vertical-align: top;">
|
Chris@49
|
2935
|
Chris@49
|
2936 </td>
|
Chris@49
|
2937 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2938 </td>
|
Chris@49
|
2939 <td style="vertical-align: top;">
|
Chris@49
|
2940
|
Chris@49
|
2941 </td>
|
Chris@49
|
2942 </tr>
|
Chris@49
|
2943 <tr>
|
Chris@49
|
2944 <td style="vertical-align: top;">
|
Chris@49
|
2945 <b>vec::const_row_iterator</b>
|
Chris@49
|
2946 <br>
|
Chris@49
|
2947 <b>rowvec::const_row_iterator</b>
|
Chris@49
|
2948 </td>
|
Chris@49
|
2949 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2950 </td>
|
Chris@49
|
2951 <td style="vertical-align: top;">
|
Chris@49
|
2952 random access iterators, for read-only access to the elements of a specific row
|
Chris@49
|
2953 </td>
|
Chris@49
|
2954 </tr>
|
Chris@49
|
2955 </tbody>
|
Chris@49
|
2956 </table>
|
Chris@49
|
2957 </ul>
|
Chris@49
|
2958 </li>
|
Chris@49
|
2959 <br>
|
Chris@49
|
2960 <br>
|
Chris@49
|
2961 <li>
|
Chris@49
|
2962 Member functions:
|
Chris@49
|
2963 <br>
|
Chris@49
|
2964 <br>
|
Chris@49
|
2965 <ul>
|
Chris@49
|
2966 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
2967 <tbody>
|
Chris@49
|
2968 <tr>
|
Chris@49
|
2969 <td style="vertical-align: top;">
|
Chris@49
|
2970 <b>.begin()</b>
|
Chris@49
|
2971 </td>
|
Chris@49
|
2972 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2973 </td>
|
Chris@49
|
2974 <td style="vertical-align: top;">
|
Chris@49
|
2975 iterator referring to the first element
|
Chris@49
|
2976 </td>
|
Chris@49
|
2977 </tr>
|
Chris@49
|
2978 <tr>
|
Chris@49
|
2979 <td style="vertical-align: top;">
|
Chris@49
|
2980 <b>.end()</b>
|
Chris@49
|
2981 </td>
|
Chris@49
|
2982 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2983 </td>
|
Chris@49
|
2984 <td style="vertical-align: top;">
|
Chris@49
|
2985 iterator referring to the <i>past-the-end</i> element
|
Chris@49
|
2986 </td>
|
Chris@49
|
2987 </tr>
|
Chris@49
|
2988 <tr>
|
Chris@49
|
2989 <td>
|
Chris@49
|
2990
|
Chris@49
|
2991 </td>
|
Chris@49
|
2992 </tr>
|
Chris@49
|
2993 <tr>
|
Chris@49
|
2994 <td style="vertical-align: top;">
|
Chris@49
|
2995 <b>.begin_row(</b><i>row_number</i><b>)</b>
|
Chris@49
|
2996 </td>
|
Chris@49
|
2997 <td style="vertical-align: top;"> <br>
|
Chris@49
|
2998 </td>
|
Chris@49
|
2999 <td style="vertical-align: top;">
|
Chris@49
|
3000 iterator referring to the first element of the specified row
|
Chris@49
|
3001 </td>
|
Chris@49
|
3002 </tr>
|
Chris@49
|
3003 <tr>
|
Chris@49
|
3004 <td style="vertical-align: top;">
|
Chris@49
|
3005 <b>.end_row(</b><i>row_number</i><b>)</b>
|
Chris@49
|
3006 </td>
|
Chris@49
|
3007 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3008 </td>
|
Chris@49
|
3009 <td style="vertical-align: top;">
|
Chris@49
|
3010 iterator referring to the <i>past-the-end</i> element of the specified row
|
Chris@49
|
3011 </td>
|
Chris@49
|
3012 </tr>
|
Chris@49
|
3013 <tr>
|
Chris@49
|
3014 <td>
|
Chris@49
|
3015
|
Chris@49
|
3016 </td>
|
Chris@49
|
3017 </tr>
|
Chris@49
|
3018 <tr>
|
Chris@49
|
3019 <td style="vertical-align: top;">
|
Chris@49
|
3020 <b>.begin_col(</b><i>col_number</i><b>)</b>
|
Chris@49
|
3021 </td>
|
Chris@49
|
3022 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3023 </td>
|
Chris@49
|
3024 <td style="vertical-align: top;">
|
Chris@49
|
3025 iterator referring to the first element of the specified column
|
Chris@49
|
3026 </td>
|
Chris@49
|
3027 </tr>
|
Chris@49
|
3028 <tr>
|
Chris@49
|
3029 <td style="vertical-align: top;">
|
Chris@49
|
3030 <b>.end_col(</b><i>col_number</i><b>)</b>
|
Chris@49
|
3031 </td>
|
Chris@49
|
3032 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3033 </td>
|
Chris@49
|
3034 <td style="vertical-align: top;">
|
Chris@49
|
3035 iterator referring to the <i>past-the-end</i> element of the specified column
|
Chris@49
|
3036 </td>
|
Chris@49
|
3037 </tr>
|
Chris@49
|
3038 </tbody>
|
Chris@49
|
3039 </table>
|
Chris@49
|
3040 </ul>
|
Chris@49
|
3041 </li>
|
Chris@49
|
3042 <br>
|
Chris@49
|
3043 <br>
|
Chris@49
|
3044 <li>
|
Chris@49
|
3045 Examples:
|
Chris@49
|
3046 <ul>
|
Chris@49
|
3047 <pre>
|
Chris@49
|
3048 mat X = randu<mat>(5,5);
|
Chris@49
|
3049
|
Chris@49
|
3050
|
Chris@49
|
3051 mat::iterator a = X.begin();
|
Chris@49
|
3052 mat::iterator b = X.end();
|
Chris@49
|
3053
|
Chris@49
|
3054 for(mat::iterator i=a; i!=b; ++i)
|
Chris@49
|
3055 {
|
Chris@49
|
3056 cout << *i << endl;
|
Chris@49
|
3057 }
|
Chris@49
|
3058
|
Chris@49
|
3059
|
Chris@49
|
3060 mat::col_iterator c = X.begin_col(1); // start of column 1
|
Chris@49
|
3061 mat::col_iterator d = X.end_col(3); // end of column 3
|
Chris@49
|
3062
|
Chris@49
|
3063 for(mat::col_iterator i=c; i!=d; ++i)
|
Chris@49
|
3064 {
|
Chris@49
|
3065 cout << *i << endl;
|
Chris@49
|
3066 (*i) = 123.0;
|
Chris@49
|
3067 }
|
Chris@49
|
3068 </pre>
|
Chris@49
|
3069 </ul>
|
Chris@49
|
3070 </li>
|
Chris@49
|
3071 <br>
|
Chris@49
|
3072 <li>
|
Chris@49
|
3073 See also:
|
Chris@49
|
3074 <ul>
|
Chris@49
|
3075 <li><a href="#stl_container_fns">STL container functions</a></li>
|
Chris@49
|
3076 <li><a href="http://cplusplus.com/reference/std/iterator/">iterator at cplusplus.com</a></li>
|
Chris@49
|
3077 <li><a href="#element_access">element access</a></li>
|
Chris@49
|
3078 <li><a href="#memptr">.memptr()</a></li>
|
Chris@49
|
3079 <li><a href="#colptr">.colptr()</a></li>
|
Chris@49
|
3080 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
3081 </ul>
|
Chris@49
|
3082 </li>
|
Chris@49
|
3083 <br>
|
Chris@49
|
3084 </ul>
|
Chris@49
|
3085 <hr class="greyline"><br>
|
Chris@49
|
3086
|
Chris@49
|
3087 <a name="iterators_cube"></a>
|
Chris@49
|
3088 <b>iterators (cubes)</b>
|
Chris@49
|
3089 <ul>
|
Chris@49
|
3090 <li>
|
Chris@49
|
3091 STL-style iterators and associated member functions of the <i>Cube</i> class
|
Chris@49
|
3092 </li>
|
Chris@49
|
3093 <br>
|
Chris@49
|
3094 <li>
|
Chris@49
|
3095 iterator types:
|
Chris@49
|
3096 <br>
|
Chris@49
|
3097 <br>
|
Chris@49
|
3098 <ul>
|
Chris@49
|
3099 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
3100 <tbody>
|
Chris@49
|
3101 <tr>
|
Chris@49
|
3102 <td style="vertical-align: top;">
|
Chris@49
|
3103 <b>cube::iterator</b>
|
Chris@49
|
3104 </td>
|
Chris@49
|
3105 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3106 </td>
|
Chris@49
|
3107 <td style="vertical-align: top;">
|
Chris@49
|
3108 random access iterator, for read/write access to elements;
|
Chris@49
|
3109 the elements are ordered slice by slice;
|
Chris@49
|
3110 the elements within each slice are ordered column by column
|
Chris@49
|
3111 </td>
|
Chris@49
|
3112 </tr>
|
Chris@49
|
3113 <tr>
|
Chris@49
|
3114 <td style="vertical-align: top;">
|
Chris@49
|
3115
|
Chris@49
|
3116 </td>
|
Chris@49
|
3117 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3118 </td>
|
Chris@49
|
3119 <td style="vertical-align: top;">
|
Chris@49
|
3120
|
Chris@49
|
3121 </td>
|
Chris@49
|
3122 </tr>
|
Chris@49
|
3123 <tr>
|
Chris@49
|
3124 <td style="vertical-align: top;">
|
Chris@49
|
3125 <b>cube::const_iterator</b>
|
Chris@49
|
3126 </td>
|
Chris@49
|
3127 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3128 </td>
|
Chris@49
|
3129 <td style="vertical-align: top;">
|
Chris@49
|
3130 random access iterators, for read-only access to elements
|
Chris@49
|
3131 </td>
|
Chris@49
|
3132 </tr>
|
Chris@49
|
3133 <tr>
|
Chris@49
|
3134 <td style="vertical-align: top;">
|
Chris@49
|
3135
|
Chris@49
|
3136 </td>
|
Chris@49
|
3137 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3138 </td>
|
Chris@49
|
3139 <td style="vertical-align: top;">
|
Chris@49
|
3140
|
Chris@49
|
3141 </td>
|
Chris@49
|
3142 </tr>
|
Chris@49
|
3143 <tr>
|
Chris@49
|
3144 <td style="vertical-align: top;">
|
Chris@49
|
3145 <b>cube::slice_iterator</b>
|
Chris@49
|
3146 </td>
|
Chris@49
|
3147 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3148 </td>
|
Chris@49
|
3149 <td style="vertical-align: top;">
|
Chris@49
|
3150 random access iterator, for read/write access to the elements of a particular slice;
|
Chris@49
|
3151 the elements are ordered column by column
|
Chris@49
|
3152 </td>
|
Chris@49
|
3153 </tr>
|
Chris@49
|
3154 <tr>
|
Chris@49
|
3155 <td style="vertical-align: top;">
|
Chris@49
|
3156
|
Chris@49
|
3157 </td>
|
Chris@49
|
3158 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3159 </td>
|
Chris@49
|
3160 <td style="vertical-align: top;">
|
Chris@49
|
3161
|
Chris@49
|
3162 </td>
|
Chris@49
|
3163 </tr>
|
Chris@49
|
3164 <tr>
|
Chris@49
|
3165 <td style="vertical-align: top;">
|
Chris@49
|
3166 <b>cube::const_slice_iterator</b>
|
Chris@49
|
3167 </td>
|
Chris@49
|
3168 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3169 </td>
|
Chris@49
|
3170 <td style="vertical-align: top;">
|
Chris@49
|
3171 random access iterators, for read-only access to the elements of a particular slice
|
Chris@49
|
3172 </td>
|
Chris@49
|
3173 </tr>
|
Chris@49
|
3174 </tbody>
|
Chris@49
|
3175 </table>
|
Chris@49
|
3176 </ul>
|
Chris@49
|
3177 </li>
|
Chris@49
|
3178 <br>
|
Chris@49
|
3179 <br>
|
Chris@49
|
3180 <li>
|
Chris@49
|
3181 Member functions:
|
Chris@49
|
3182 <br>
|
Chris@49
|
3183 <br>
|
Chris@49
|
3184 <ul>
|
Chris@49
|
3185 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
3186 <tbody>
|
Chris@49
|
3187 <tr>
|
Chris@49
|
3188 <td style="vertical-align: top;">
|
Chris@49
|
3189 <b>.begin()</b>
|
Chris@49
|
3190 </td>
|
Chris@49
|
3191 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3192 </td>
|
Chris@49
|
3193 <td style="vertical-align: top;">
|
Chris@49
|
3194 iterator referring to the first element
|
Chris@49
|
3195 </td>
|
Chris@49
|
3196 </tr>
|
Chris@49
|
3197 <tr>
|
Chris@49
|
3198 <td style="vertical-align: top;">
|
Chris@49
|
3199 <b>.end()</b>
|
Chris@49
|
3200 </td>
|
Chris@49
|
3201 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3202 </td>
|
Chris@49
|
3203 <td style="vertical-align: top;">
|
Chris@49
|
3204 iterator referring to the <i>past-the-end</i> element
|
Chris@49
|
3205 </td>
|
Chris@49
|
3206 </tr>
|
Chris@49
|
3207 <tr>
|
Chris@49
|
3208 <td>
|
Chris@49
|
3209
|
Chris@49
|
3210 </td>
|
Chris@49
|
3211 </tr>
|
Chris@49
|
3212 <tr>
|
Chris@49
|
3213 <td style="vertical-align: top;">
|
Chris@49
|
3214 <b>.begin_slice(</b><i>slice_number</i><b>)</b>
|
Chris@49
|
3215 </td>
|
Chris@49
|
3216 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3217 </td>
|
Chris@49
|
3218 <td style="vertical-align: top;">
|
Chris@49
|
3219 iterator referring to the first element of the specified slice
|
Chris@49
|
3220 </td>
|
Chris@49
|
3221 </tr>
|
Chris@49
|
3222 <tr>
|
Chris@49
|
3223 <td style="vertical-align: top;">
|
Chris@49
|
3224 <b>.end_slice(</b><i>slice_number</i><b>)</b>
|
Chris@49
|
3225 </td>
|
Chris@49
|
3226 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3227 </td>
|
Chris@49
|
3228 <td style="vertical-align: top;">
|
Chris@49
|
3229 iterator referring to the <i>past-the-end</i> element of the specified slice
|
Chris@49
|
3230 </td>
|
Chris@49
|
3231 </tr>
|
Chris@49
|
3232 </tbody>
|
Chris@49
|
3233 </table>
|
Chris@49
|
3234 </ul>
|
Chris@49
|
3235 </li>
|
Chris@49
|
3236 <br>
|
Chris@49
|
3237 <br>
|
Chris@49
|
3238 <li>
|
Chris@49
|
3239 Examples:
|
Chris@49
|
3240 <ul>
|
Chris@49
|
3241 <pre>
|
Chris@49
|
3242 cube X = randu<cube>(2,3,4);
|
Chris@49
|
3243
|
Chris@49
|
3244
|
Chris@49
|
3245 cube::iterator a = X.begin();
|
Chris@49
|
3246 cube::iterator b = X.end();
|
Chris@49
|
3247
|
Chris@49
|
3248 for(cube::iterator i=a; i!=b; ++i)
|
Chris@49
|
3249 {
|
Chris@49
|
3250 cout << *i << endl;
|
Chris@49
|
3251 }
|
Chris@49
|
3252
|
Chris@49
|
3253
|
Chris@49
|
3254 cube::slice_iterator c = X.begin_slice(1); // start of slice 1
|
Chris@49
|
3255 cube::slice_iterator d = X.end_slice(2); // end of slice 2
|
Chris@49
|
3256
|
Chris@49
|
3257 for(cube::slice_iterator i=c; i!=d; ++i)
|
Chris@49
|
3258 {
|
Chris@49
|
3259 cout << *i << endl;
|
Chris@49
|
3260 (*i) = 123.0;
|
Chris@49
|
3261 }
|
Chris@49
|
3262 </pre>
|
Chris@49
|
3263 </ul>
|
Chris@49
|
3264 </li>
|
Chris@49
|
3265 <br>
|
Chris@49
|
3266 <li>
|
Chris@49
|
3267 See also:
|
Chris@49
|
3268 <ul>
|
Chris@49
|
3269 <li><a href="http://cplusplus.com/reference/std/iterator/">iterator at cplusplus.com</a></li>
|
Chris@49
|
3270 <li><a href="#element_access">element access</a></li>
|
Chris@49
|
3271 </ul>
|
Chris@49
|
3272 </li>
|
Chris@49
|
3273 <br>
|
Chris@49
|
3274 </ul>
|
Chris@49
|
3275 <hr class="greyline"><br>
|
Chris@49
|
3276
|
Chris@49
|
3277 <a name="memptr"></a>
|
Chris@49
|
3278 <b>.memptr()</b>
|
Chris@49
|
3279 <ul>
|
Chris@49
|
3280 <li>
|
Chris@49
|
3281 Member function of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i> classes
|
Chris@49
|
3282 </li>
|
Chris@49
|
3283 <br>
|
Chris@49
|
3284 <li>
|
Chris@49
|
3285 Obtain a raw pointer to the memory used for storing elements. Not recommended for use unless you know what you're doing!
|
Chris@49
|
3286 </li>
|
Chris@49
|
3287 <br>
|
Chris@49
|
3288 <li>
|
Chris@49
|
3289 The function can be used for interfacing with libraries such as <a href="http://www.fftw.org/">FFTW</a>
|
Chris@49
|
3290 </li>
|
Chris@49
|
3291 <br>
|
Chris@49
|
3292 <li>
|
Chris@49
|
3293 As soon as the size of the matrix/vector/cube is changed, the pointer is no longer valid
|
Chris@49
|
3294 </li>
|
Chris@49
|
3295 <br>
|
Chris@49
|
3296 <li>
|
Chris@49
|
3297 Data for matrices is stored in a column-by-column order
|
Chris@49
|
3298 </li>
|
Chris@49
|
3299 <br>
|
Chris@49
|
3300 <li>
|
Chris@49
|
3301 Data for cubes is stored in a slice-by-slice (matrix-by-matrix) order
|
Chris@49
|
3302 </li>
|
Chris@49
|
3303 <br>
|
Chris@49
|
3304 <li>
|
Chris@49
|
3305 Examples:
|
Chris@49
|
3306 <ul>
|
Chris@49
|
3307 <pre>
|
Chris@49
|
3308 mat A = randu<mat>(5,5);
|
Chris@49
|
3309 const mat B = randu<mat>(5,5);
|
Chris@49
|
3310
|
Chris@49
|
3311 double* A_mem = A.memptr();
|
Chris@49
|
3312 const double* B_mem = B.memptr();
|
Chris@49
|
3313 </pre>
|
Chris@49
|
3314 </ul>
|
Chris@49
|
3315 </li>
|
Chris@49
|
3316 <br>
|
Chris@49
|
3317 <li>
|
Chris@49
|
3318 See also:
|
Chris@49
|
3319 <ul>
|
Chris@49
|
3320 <li><a href="#colptr">.colptr()</a></li>
|
Chris@49
|
3321 <li><a href="#element_access">element_access</a></li>
|
Chris@49
|
3322 <li><a href="#iterators_mat">iterators (matrices)</a></li>
|
Chris@49
|
3323 <li><a href="#iterators_cube">iterators (cubes)</a></li>
|
Chris@49
|
3324 <li><a href="#adv_constructors_mat">advanced constructors (matrices)</a></li>
|
Chris@49
|
3325 <li><a href="#adv_constructors_cube">advanced constructors (cubes)</a></li>
|
Chris@49
|
3326 </ul>
|
Chris@49
|
3327 </li>
|
Chris@49
|
3328 <br>
|
Chris@49
|
3329 </ul>
|
Chris@49
|
3330 <hr class="greyline"><br>
|
Chris@49
|
3331
|
Chris@49
|
3332 <a name="min_and_max_member"></a>
|
Chris@49
|
3333 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
3334 <tbody>
|
Chris@49
|
3335 <tr>
|
Chris@49
|
3336 <td style="vertical-align: top;"><b>.min()</b></td>
|
Chris@49
|
3337 <td style="vertical-align: top;"><br>
|
Chris@49
|
3338 </td>
|
Chris@49
|
3339 <td style="vertical-align: top;">(member functions of <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i>)
|
Chris@49
|
3340 </td>
|
Chris@49
|
3341 </tr>
|
Chris@49
|
3342 <tr>
|
Chris@49
|
3343 <td style="vertical-align: top;"><b>.max()</b></td>
|
Chris@49
|
3344 <td style="vertical-align: top;"><br>
|
Chris@49
|
3345 </td>
|
Chris@49
|
3346 <td style="vertical-align: top;">
|
Chris@49
|
3347 </td>
|
Chris@49
|
3348 </tr>
|
Chris@49
|
3349 <tr>
|
Chris@49
|
3350 <td style="vertical-align: top;"> </td>
|
Chris@49
|
3351 <td style="vertical-align: top;"><br>
|
Chris@49
|
3352 </td>
|
Chris@49
|
3353 <td style="vertical-align: top;">
|
Chris@49
|
3354 </td>
|
Chris@49
|
3355 </tr>
|
Chris@49
|
3356 <tr>
|
Chris@49
|
3357 <td style="vertical-align: top;"><b>.min(</b> index_of_min_val <b>)</b></td>
|
Chris@49
|
3358 <td style="vertical-align: top;"><br>
|
Chris@49
|
3359 </td>
|
Chris@49
|
3360 <td style="vertical-align: top;">(member functions of <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i>)
|
Chris@49
|
3361 </td>
|
Chris@49
|
3362 </tr>
|
Chris@49
|
3363 <tr>
|
Chris@49
|
3364 <td style="vertical-align: top;"><b>.max(</b> index_of_max_val <b>)</b></td>
|
Chris@49
|
3365 <td style="vertical-align: top;"><br>
|
Chris@49
|
3366 </td>
|
Chris@49
|
3367 <td style="vertical-align: top;">
|
Chris@49
|
3368 </td>
|
Chris@49
|
3369 </tr>
|
Chris@49
|
3370 <tr>
|
Chris@49
|
3371 <td style="vertical-align: top;"> </td>
|
Chris@49
|
3372 <td style="vertical-align: top;"><br>
|
Chris@49
|
3373 </td>
|
Chris@49
|
3374 <td style="vertical-align: top;">
|
Chris@49
|
3375 </td>
|
Chris@49
|
3376 </tr>
|
Chris@49
|
3377 <tr>
|
Chris@49
|
3378 <td style="vertical-align: top;"><b>.min(</b> row_of_min_val<b>,</b> col_of_min_val <b>)</b></td>
|
Chris@49
|
3379 <td style="vertical-align: top;"><br>
|
Chris@49
|
3380 </td>
|
Chris@49
|
3381 <td style="vertical-align: top;">(member functions of <i>Mat</i>)
|
Chris@49
|
3382 </td>
|
Chris@49
|
3383 </tr>
|
Chris@49
|
3384 <tr>
|
Chris@49
|
3385 <td style="vertical-align: top;"><b>.max(</b> row_of_max_val<b>,</b> col_of_max_val <b>)</b></td>
|
Chris@49
|
3386 <td style="vertical-align: top;"><br>
|
Chris@49
|
3387 </td>
|
Chris@49
|
3388 <td style="vertical-align: top;">
|
Chris@49
|
3389 </td>
|
Chris@49
|
3390 </tr>
|
Chris@49
|
3391 <tr>
|
Chris@49
|
3392 <td style="vertical-align: top;"> </td>
|
Chris@49
|
3393 <td style="vertical-align: top;"><br>
|
Chris@49
|
3394 </td>
|
Chris@49
|
3395 <td style="vertical-align: top;">
|
Chris@49
|
3396 </td>
|
Chris@49
|
3397 </tr>
|
Chris@49
|
3398 <tr>
|
Chris@49
|
3399 <td style="vertical-align: top;"><b>.min(</b> row_of_min_val<b>,</b> col_of_min_val<b>,</b> slice_of_min_val <b>)</b></td>
|
Chris@49
|
3400 <td style="vertical-align: top;"><br>
|
Chris@49
|
3401 </td>
|
Chris@49
|
3402 <td style="vertical-align: top;">(member functions of <i>Cube</i>)
|
Chris@49
|
3403 </td>
|
Chris@49
|
3404 </tr>
|
Chris@49
|
3405 <tr>
|
Chris@49
|
3406 <td style="vertical-align: top;"><b>.max(</b> row_of_max_val<b>,</b> col_of_max_val<b>,</b> slice_of_max_val <b>)</b></td>
|
Chris@49
|
3407 <td style="vertical-align: top;"><br>
|
Chris@49
|
3408 </td>
|
Chris@49
|
3409 <td style="vertical-align: top;">
|
Chris@49
|
3410 </td>
|
Chris@49
|
3411 </tr>
|
Chris@49
|
3412 </tbody>
|
Chris@49
|
3413 </table>
|
Chris@49
|
3414 <ul>
|
Chris@49
|
3415 <br>
|
Chris@49
|
3416 <li>
|
Chris@49
|
3417 Without arguments: return the extremum value of an object
|
Chris@49
|
3418 </li>
|
Chris@49
|
3419 <br>
|
Chris@49
|
3420 <li>
|
Chris@49
|
3421 With one or more arguments: return the extremum value of an object and store the location of the extremum value in the provided variable(s)
|
Chris@49
|
3422 </li>
|
Chris@49
|
3423 <br>
|
Chris@49
|
3424 <li>
|
Chris@49
|
3425 The provided variables must be of type <a href="#uword">uword</a>.
|
Chris@49
|
3426 </li>
|
Chris@49
|
3427 <br>
|
Chris@49
|
3428 <li>
|
Chris@49
|
3429 Examples:
|
Chris@49
|
3430 <ul>
|
Chris@49
|
3431 <pre>
|
Chris@49
|
3432 vec v = randu<vec>(10);
|
Chris@49
|
3433
|
Chris@49
|
3434 cout << "min value is " << v.min() << endl;
|
Chris@49
|
3435
|
Chris@49
|
3436
|
Chris@49
|
3437 uword index;
|
Chris@49
|
3438 double min_val = v.min(index);
|
Chris@49
|
3439
|
Chris@49
|
3440 cout << "index of min value is " << index << endl;
|
Chris@49
|
3441
|
Chris@49
|
3442
|
Chris@49
|
3443 mat A = randu<mat>(5,5);
|
Chris@49
|
3444
|
Chris@49
|
3445 uword row;
|
Chris@49
|
3446 uword col;
|
Chris@49
|
3447 double min_val2 = A.max(row,col);
|
Chris@49
|
3448
|
Chris@49
|
3449 cout << "max value is at " << row << ',' << col << endl;
|
Chris@49
|
3450 </pre>
|
Chris@49
|
3451 </ul>
|
Chris@49
|
3452 </li>
|
Chris@49
|
3453 <br>
|
Chris@49
|
3454 <li>
|
Chris@49
|
3455 See also:
|
Chris@49
|
3456 <ul>
|
Chris@49
|
3457 <li><a href="#min_and_max">min() & max()</a> (standalone functions)</li>
|
Chris@49
|
3458 <li><a href="#running_stat">running_stat</a></li>
|
Chris@49
|
3459 <li><a href="#running_stat_vec">running_stat_vec</a></li>
|
Chris@49
|
3460 </ul>
|
Chris@49
|
3461 </li>
|
Chris@49
|
3462 <br>
|
Chris@49
|
3463 </ul>
|
Chris@49
|
3464 <hr class="greyline"><br>
|
Chris@49
|
3465
|
Chris@49
|
3466 <a name="ones_member"></a>
|
Chris@49
|
3467 <b>.ones()</b>
|
Chris@49
|
3468 <br><b>.ones(n_elem)</b>
|
Chris@49
|
3469 <br><b>.ones(n_rows, n_cols)</b>
|
Chris@49
|
3470 <br><b>.ones(n_rows, n_cols, n_slices)</b>
|
Chris@49
|
3471 <ul>
|
Chris@49
|
3472 <li>
|
Chris@49
|
3473 Set the elements of an object to one, optionally first resizing to specified dimensions
|
Chris@49
|
3474 </li>
|
Chris@49
|
3475 <br>
|
Chris@49
|
3476 <li>
|
Chris@49
|
3477 <i>.ones()</i> and <i>.ones(n_elem)</i> are member functions of <i>Col</i> and <i>Row</i>
|
Chris@49
|
3478 </li>
|
Chris@49
|
3479 <br>
|
Chris@49
|
3480 <li>
|
Chris@49
|
3481 <i>.ones()</i> and <i>.ones(n_rows, n_cols)</i> are member functions of <i>Mat</i>
|
Chris@49
|
3482 </li>
|
Chris@49
|
3483 <br>
|
Chris@49
|
3484 <li>
|
Chris@49
|
3485 <i>.ones()</i> and <i>.ones(n_rows, n_cols, n_slices)</i> are member functions of <i>Cube</i>
|
Chris@49
|
3486 </li>
|
Chris@49
|
3487 <br>
|
Chris@49
|
3488 <li>
|
Chris@49
|
3489 Examples:
|
Chris@49
|
3490 <ul>
|
Chris@49
|
3491 <pre>
|
Chris@49
|
3492 mat A = randu<mat>(5,10);
|
Chris@49
|
3493 A.ones(); // sets all elements to one
|
Chris@49
|
3494 A.ones(10,20); // sets the size to 10 rows and 20 columns
|
Chris@49
|
3495 // followed by setting all elements to one
|
Chris@49
|
3496 </pre>
|
Chris@49
|
3497 </ul>
|
Chris@49
|
3498 </li>
|
Chris@49
|
3499 <br>
|
Chris@49
|
3500 <li>
|
Chris@49
|
3501 See also:
|
Chris@49
|
3502 <ul>
|
Chris@49
|
3503 <li><a href="#ones_standalone">ones()</a> (standalone function)</li>
|
Chris@49
|
3504 <li><a href="#eye_member">.eye()</a></li>
|
Chris@49
|
3505 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
3506 <li><a href="#fill">.fill()</a></li>
|
Chris@49
|
3507 <li><a href="#imbue">.imbue()</a></li>
|
Chris@49
|
3508 <li><a href="#randu_randn_member">.randu()</a></li>
|
Chris@49
|
3509 </ul>
|
Chris@49
|
3510 </li>
|
Chris@49
|
3511 <br>
|
Chris@49
|
3512 </ul>
|
Chris@49
|
3513 <hr class="greyline"><br>
|
Chris@49
|
3514
|
Chris@49
|
3515 <a name="operators"></a>
|
Chris@49
|
3516 <b>operators: + - * / % == != <= >= < ></b>
|
Chris@49
|
3517 <ul>
|
Chris@49
|
3518 <li>
|
Chris@49
|
3519 Overloaded operators for <i>mat</i>, <i>vec</i>, <i>rowvec</i> and <i>cube</i> classes
|
Chris@49
|
3520 </li>
|
Chris@49
|
3521 <br>
|
Chris@49
|
3522 <li>
|
Chris@49
|
3523 Meanings:
|
Chris@49
|
3524 <br>
|
Chris@49
|
3525 <br>
|
Chris@49
|
3526 <ul>
|
Chris@49
|
3527 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
3528 <tbody>
|
Chris@49
|
3529 <tr>
|
Chris@49
|
3530 <td style="vertical-align: top;"><b>+</b></td>
|
Chris@49
|
3531 <td style="vertical-align: top;"> <br>
|
Chris@49
|
3532 </td>
|
Chris@49
|
3533 <td style="vertical-align: top;">Addition of two objects</td>
|
Chris@49
|
3534 </tr>
|
Chris@49
|
3535 <tr>
|
Chris@49
|
3536 <td style="vertical-align: top;"><b>-</b></td>
|
Chris@49
|
3537 <td style="vertical-align: top;"><br>
|
Chris@49
|
3538 </td>
|
Chris@49
|
3539 <td style="vertical-align: top;">Subtraction of one object from another or negation of an object</td>
|
Chris@49
|
3540 </tr>
|
Chris@49
|
3541 <tr>
|
Chris@49
|
3542 <td style="vertical-align: top;"><b>/</b></td>
|
Chris@49
|
3543 <td style="vertical-align: top;"><br>
|
Chris@49
|
3544 </td>
|
Chris@49
|
3545 <td style="vertical-align: top;">Element-wise division of an object by another object or a scalar</td>
|
Chris@49
|
3546 </tr>
|
Chris@49
|
3547 <tr>
|
Chris@49
|
3548 <td style="vertical-align: top;"><b>*</b></td>
|
Chris@49
|
3549 <td style="vertical-align: top;"><br>
|
Chris@49
|
3550 </td>
|
Chris@49
|
3551 <td style="vertical-align: top;">Matrix multiplication of two objects; not applicable to the <i>cube</i> class unless multiplying a cube by a scalar</td>
|
Chris@49
|
3552 </tr>
|
Chris@49
|
3553 <tr>
|
Chris@49
|
3554 <td style="vertical-align: top;"><b>%</b></td>
|
Chris@49
|
3555 <td style="vertical-align: top;"><br>
|
Chris@49
|
3556 </td>
|
Chris@49
|
3557 <td style="vertical-align: top;"><a name="schur_product"></a>Schur product: element-wise multiplication of two objects</td>
|
Chris@49
|
3558 </tr>
|
Chris@49
|
3559 <tr>
|
Chris@49
|
3560 <td style="vertical-align: top;"><b>==</b></td>
|
Chris@49
|
3561 <td style="vertical-align: top;"><br>
|
Chris@49
|
3562 </td>
|
Chris@49
|
3563 <td style="vertical-align: top;">Element-wise equality evaluation of two objects; generates a matrix of type <i>umat</i> with entries that indicate whether at a given position the two elements from the two objects are equal (1) or not equal (0)</td>
|
Chris@49
|
3564 </tr>
|
Chris@49
|
3565 <tr>
|
Chris@49
|
3566 <td style="vertical-align: top;"><b>!=</b></td>
|
Chris@49
|
3567 <td style="vertical-align: top;"><br>
|
Chris@49
|
3568 </td>
|
Chris@49
|
3569 <td style="vertical-align: top;">Element-wise non-equality evaluation of two objects</td>
|
Chris@49
|
3570 </tr>
|
Chris@49
|
3571 <tr>
|
Chris@49
|
3572 <td style="vertical-align: top;"><b>>=</b></td>
|
Chris@49
|
3573 <td style="vertical-align: top;"><br>
|
Chris@49
|
3574 </td>
|
Chris@49
|
3575 <td style="vertical-align: top;">As for ==, but the check is for "greater than or equal to"</td>
|
Chris@49
|
3576 </tr>
|
Chris@49
|
3577 <tr>
|
Chris@49
|
3578 <td style="vertical-align: top;"><b><=</b></td>
|
Chris@49
|
3579 <td style="vertical-align: top;"><br>
|
Chris@49
|
3580 </td>
|
Chris@49
|
3581 <td style="vertical-align: top;">As for ==, but the check is for "less than or equal to"</td>
|
Chris@49
|
3582 </tr>
|
Chris@49
|
3583 <tr>
|
Chris@49
|
3584 <td style="vertical-align: top;"><b>></b></td>
|
Chris@49
|
3585 <td style="vertical-align: top;"><br>
|
Chris@49
|
3586 </td>
|
Chris@49
|
3587 <td style="vertical-align: top;">As for ==, but the check is for "greater than"</td>
|
Chris@49
|
3588 </tr>
|
Chris@49
|
3589 <tr>
|
Chris@49
|
3590 <td style="vertical-align: top;"><b><</b></td>
|
Chris@49
|
3591 <td style="vertical-align: top;"><br>
|
Chris@49
|
3592 </td>
|
Chris@49
|
3593 <td style="vertical-align: top;">As for ==, but the check is for "less than"</td>
|
Chris@49
|
3594 </tr>
|
Chris@49
|
3595 </tbody>
|
Chris@49
|
3596 </table>
|
Chris@49
|
3597 </ul>
|
Chris@49
|
3598 </li>
|
Chris@49
|
3599 <br>
|
Chris@49
|
3600 <li>
|
Chris@49
|
3601 A <i>std::logic_error</i> exception is thrown if incompatible object sizes are used
|
Chris@49
|
3602 </li>
|
Chris@49
|
3603 <br>
|
Chris@49
|
3604 <li>
|
Chris@49
|
3605 If the +, - and % operators are chained, Armadillo will try to avoid the generation of temporaries;
|
Chris@49
|
3606 no temporaries are generated if all given objects are of the same type and size
|
Chris@49
|
3607 </li>
|
Chris@49
|
3608 <br>
|
Chris@49
|
3609 <li>
|
Chris@49
|
3610 If the * operator is chained, Armadillo will try to find an efficient ordering of the matrix multiplications
|
Chris@49
|
3611 </li>
|
Chris@49
|
3612 <br>
|
Chris@49
|
3613 <li>
|
Chris@49
|
3614 <b>Caveat:</b> operators involving an equality comparison (ie., ==, !=, >=, <=)
|
Chris@49
|
3615 may not work as expected for floating point element types (ie., <i>float</i>, <i>double</i>)
|
Chris@49
|
3616 due to the necessarily limited precision of these types;
|
Chris@49
|
3617 in other words, these operators are (in general) not recommended for matrices of type <i>mat</i> or <i>fmat</i>
|
Chris@49
|
3618 </li>
|
Chris@49
|
3619 <br>
|
Chris@49
|
3620 <br>
|
Chris@49
|
3621 <li>
|
Chris@49
|
3622 Examples:
|
Chris@49
|
3623 <ul>
|
Chris@49
|
3624 <pre>
|
Chris@49
|
3625 mat A = randu<mat>(5,10);
|
Chris@49
|
3626 mat B = randu<mat>(5,10);
|
Chris@49
|
3627 mat C = randu<mat>(10,5);
|
Chris@49
|
3628
|
Chris@49
|
3629 mat P = A + B;
|
Chris@49
|
3630 mat Q = A - B;
|
Chris@49
|
3631 mat R = -B;
|
Chris@49
|
3632 mat S = A / 123.0;
|
Chris@49
|
3633 mat T = A % B;
|
Chris@49
|
3634 mat U = A * C;
|
Chris@49
|
3635
|
Chris@49
|
3636 // V is constructed without temporaries
|
Chris@49
|
3637 mat V = A + B + A + B;
|
Chris@49
|
3638
|
Chris@49
|
3639 imat AA = "1 2 3; 4 5 6; 7 8 9;";
|
Chris@49
|
3640 imat BB = "3 2 1; 6 5 4; 9 8 7;";
|
Chris@49
|
3641
|
Chris@49
|
3642 // compare elements
|
Chris@49
|
3643 umat ZZ = (AA >= BB);
|
Chris@49
|
3644 </pre>
|
Chris@49
|
3645 </ul>
|
Chris@49
|
3646 </li>
|
Chris@49
|
3647 <br>
|
Chris@49
|
3648 <li>
|
Chris@49
|
3649 See also:
|
Chris@49
|
3650 <ul>
|
Chris@49
|
3651 <li><a href="#accu">accu()</a></li>
|
Chris@49
|
3652 <li><a href="#as_scalar">as_scalar()</a></li>
|
Chris@49
|
3653 <li><a href="#find">find()</a></li>
|
Chris@49
|
3654 <li><a href="#transform">.transform()</a></li>
|
Chris@49
|
3655 </ul>
|
Chris@49
|
3656 </li>
|
Chris@49
|
3657 <br>
|
Chris@49
|
3658 </ul>
|
Chris@49
|
3659 <hr class="greyline"><br>
|
Chris@49
|
3660
|
Chris@49
|
3661 <a name="print"></a>
|
Chris@49
|
3662 <b>.print(header="")</b>
|
Chris@49
|
3663 <br><b>.print(stream, header="")</b>
|
Chris@49
|
3664 <ul>
|
Chris@49
|
3665 <li>
|
Chris@49
|
3666 Member function of <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i> and <i>field</i>
|
Chris@49
|
3667 </li>
|
Chris@49
|
3668 <br>
|
Chris@49
|
3669 <li>
|
Chris@49
|
3670 The first form prints the contents of an object to the <i>std::cout</i> stream, with an optional header line
|
Chris@49
|
3671 </li>
|
Chris@49
|
3672 <br>
|
Chris@49
|
3673 <li>
|
Chris@49
|
3674 The second form prints to a user specified stream
|
Chris@49
|
3675 </li>
|
Chris@49
|
3676 <br>
|
Chris@49
|
3677 <li>
|
Chris@49
|
3678 It's also possible to print objects using the << stream operator
|
Chris@49
|
3679 </li>
|
Chris@49
|
3680 <br>
|
Chris@49
|
3681 <li>
|
Chris@49
|
3682 Elements of a field can only be printed if there is an associated <i>operator<<</i> function defined
|
Chris@49
|
3683 </li>
|
Chris@49
|
3684 <br>
|
Chris@49
|
3685 <li>
|
Chris@49
|
3686 Examples:
|
Chris@49
|
3687 <ul>
|
Chris@49
|
3688 <pre>
|
Chris@49
|
3689 mat A = randu<mat>(5,5);
|
Chris@49
|
3690 mat B = randu<mat>(6,6);
|
Chris@49
|
3691
|
Chris@49
|
3692 A.print();
|
Chris@49
|
3693
|
Chris@49
|
3694 // print a transposed version of A
|
Chris@49
|
3695 A.t().print();
|
Chris@49
|
3696
|
Chris@49
|
3697 // "B:" is the optional header line
|
Chris@49
|
3698 B.print("B:");
|
Chris@49
|
3699
|
Chris@49
|
3700 cout << A << endl;
|
Chris@49
|
3701 cout << "B:" << endl << B << endl;
|
Chris@49
|
3702 </pre>
|
Chris@49
|
3703 </ul>
|
Chris@49
|
3704 </li>
|
Chris@49
|
3705 <br>
|
Chris@49
|
3706 <li>
|
Chris@49
|
3707 See also:
|
Chris@49
|
3708 <ul>
|
Chris@49
|
3709 <li><a href="#raw_print">.raw_print()</a></li>
|
Chris@49
|
3710 <li><a href="#save_load_mat">saving & loading matrices</a></li>
|
Chris@49
|
3711 <li><a href="#element_initialisation">initialising elements</a></li>
|
Chris@49
|
3712 <li><a href="#logging">logging of errors and warnings</a></li>
|
Chris@49
|
3713 </ul>
|
Chris@49
|
3714 </li>
|
Chris@49
|
3715 <br>
|
Chris@49
|
3716 </ul>
|
Chris@49
|
3717 <hr class="greyline"><br>
|
Chris@49
|
3718
|
Chris@49
|
3719 <a name="raw_print"></a>
|
Chris@49
|
3720 <b>.raw_print(header="")</b>
|
Chris@49
|
3721 <br><b>.raw_print(stream, header="")</b>
|
Chris@49
|
3722 <ul>
|
Chris@49
|
3723 <li>
|
Chris@49
|
3724 Member function of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i>
|
Chris@49
|
3725 </li>
|
Chris@49
|
3726 <br>
|
Chris@49
|
3727 <li>
|
Chris@49
|
3728 Similar to the <a href="#print">.print()</a> member function,
|
Chris@49
|
3729 with the difference being that no formatting of the output is done -- ie. the user can set the stream's parameters such as precision, cell width, etc.
|
Chris@49
|
3730 </li>
|
Chris@49
|
3731 <br>
|
Chris@49
|
3732 <li>
|
Chris@49
|
3733 If the cell width is set to zero, a space is printed between the elements
|
Chris@49
|
3734 </li>
|
Chris@49
|
3735 <br>
|
Chris@49
|
3736 <li>
|
Chris@49
|
3737 Examples:
|
Chris@49
|
3738 <ul>
|
Chris@49
|
3739 <pre>
|
Chris@49
|
3740 mat A = randu<mat>(5,5);
|
Chris@49
|
3741
|
Chris@49
|
3742 cout.precision(11);
|
Chris@49
|
3743 cout.setf(ios::fixed);
|
Chris@49
|
3744
|
Chris@49
|
3745 A.raw_print(cout, "A =");
|
Chris@49
|
3746 </pre>
|
Chris@49
|
3747 </ul>
|
Chris@49
|
3748 </li>
|
Chris@49
|
3749 </ul>
|
Chris@49
|
3750 <br>
|
Chris@49
|
3751 <hr class="greyline"><br>
|
Chris@49
|
3752
|
Chris@49
|
3753 <a name="randu_randn_member"></a>
|
Chris@49
|
3754 <b>.randu()</b>
|
Chris@49
|
3755 <br><b>.randu(n_elem)</b>
|
Chris@49
|
3756 <br><b>.randu(n_rows, n_cols)</b>
|
Chris@49
|
3757 <br><b>.randu(n_rows, n_cols, n_slices)</b>
|
Chris@49
|
3758 <br>
|
Chris@49
|
3759 <br>
|
Chris@49
|
3760 <b>.randn()</b>
|
Chris@49
|
3761 <br><b>.randn(n_elem)</b>
|
Chris@49
|
3762 <br><b>.randn(n_rows, n_cols)</b>
|
Chris@49
|
3763 <br><b>.randn(n_rows, n_cols, n_slices)</b>
|
Chris@49
|
3764 <ul>
|
Chris@49
|
3765 <li>
|
Chris@49
|
3766 Fill an object with random values, optionally first resizing to specified dimensions
|
Chris@49
|
3767 </li>
|
Chris@49
|
3768 <br>
|
Chris@49
|
3769 <li><i>.randu()</i> uses a uniform distribution in the [0,1] interval
|
Chris@49
|
3770 </li>
|
Chris@49
|
3771 <br>
|
Chris@49
|
3772 <li><i>.randn()</i> uses a normal/Gaussian distribution with zero mean and unit variance
|
Chris@49
|
3773 </li>
|
Chris@49
|
3774 <br>
|
Chris@49
|
3775 <li>
|
Chris@49
|
3776 To change the seed, use the <a href="http://cplusplus.com/reference/clibrary/cstdlib/srand/">std::srand()</a> function
|
Chris@49
|
3777 </li>
|
Chris@49
|
3778 <br>
|
Chris@49
|
3779 <li>
|
Chris@49
|
3780 Examples:
|
Chris@49
|
3781 <ul>
|
Chris@49
|
3782 <pre>
|
Chris@49
|
3783 mat A(4,5);
|
Chris@49
|
3784 A.randu();
|
Chris@49
|
3785
|
Chris@49
|
3786 mat B;
|
Chris@49
|
3787 B.randu(6,7);
|
Chris@49
|
3788 </pre>
|
Chris@49
|
3789 </ul>
|
Chris@49
|
3790 </li>
|
Chris@49
|
3791 <br>
|
Chris@49
|
3792 <li>
|
Chris@49
|
3793 See also:
|
Chris@49
|
3794 <ul>
|
Chris@49
|
3795 <li><a href="#randu_randn_standalone">randu() & randn()</a> (standalone functions)</li>
|
Chris@49
|
3796 <li><a href="#fill">.fill()</a></li>
|
Chris@49
|
3797 <li><a href="#imbue">.imbue()</a></li>
|
Chris@49
|
3798 <li><a href="#ones_member">.ones()</a></li>
|
Chris@49
|
3799 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
3800 <li><a href="http://cplusplus.com/reference/clibrary/cstdlib/srand/">std::srand()</a></li>
|
Chris@49
|
3801 </ul>
|
Chris@49
|
3802 </li>
|
Chris@49
|
3803 <br>
|
Chris@49
|
3804 </ul>
|
Chris@49
|
3805 <hr class="greyline"><br>
|
Chris@49
|
3806
|
Chris@49
|
3807 <a name="reset"></a>
|
Chris@49
|
3808 <b>
|
Chris@49
|
3809 .reset()
|
Chris@49
|
3810 </b>
|
Chris@49
|
3811 <ul>
|
Chris@49
|
3812 <li>
|
Chris@49
|
3813 Member function of <i>Mat</i>, <i>Col</i>, <i>Row</i>, <i>Cube</i> and <i>field</i>
|
Chris@49
|
3814 </li>
|
Chris@49
|
3815 <br>
|
Chris@49
|
3816 <li>
|
Chris@49
|
3817 Causes an object to have no elements
|
Chris@49
|
3818 </li>
|
Chris@49
|
3819 <br>
|
Chris@49
|
3820 <li>
|
Chris@49
|
3821 Examples:
|
Chris@49
|
3822 <ul>
|
Chris@49
|
3823 <pre>
|
Chris@49
|
3824 mat A = randu<mat>(5, 5);
|
Chris@49
|
3825 A.reset();
|
Chris@49
|
3826 </pre>
|
Chris@49
|
3827 </ul>
|
Chris@49
|
3828 </li>
|
Chris@49
|
3829 <br>
|
Chris@49
|
3830 <li>See also:
|
Chris@49
|
3831 <ul>
|
Chris@49
|
3832 <li><a href="#set_size">.set_size()</a></li>
|
Chris@49
|
3833 <li><a href="#is_empty">.is_empty()</a></li>
|
Chris@49
|
3834 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
3835 </ul>
|
Chris@49
|
3836 </li>
|
Chris@49
|
3837 </ul>
|
Chris@49
|
3838 <br>
|
Chris@49
|
3839 <hr class="greyline"><br>
|
Chris@49
|
3840
|
Chris@49
|
3841 <a name="reshape_member"></a>
|
Chris@49
|
3842 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
3843 <tbody>
|
Chris@49
|
3844 <tr>
|
Chris@49
|
3845 <td style="vertical-align: top;"><b>.reshape(n_rows, n_cols, dim=0)</b></td>
|
Chris@49
|
3846 <td style="vertical-align: top;"><br>
|
Chris@49
|
3847 </td>
|
Chris@49
|
3848 <td style="vertical-align: top;">(member function of <i>Mat</i>, <i>Col</i>, <i>Row</i>)
|
Chris@49
|
3849 </td>
|
Chris@49
|
3850 </tr>
|
Chris@49
|
3851 <tr>
|
Chris@49
|
3852 <td style="vertical-align: top;"><b>.reshape(n_rows, n_cols, n_slices, dim=0)</b></td>
|
Chris@49
|
3853 <td style="vertical-align: top;"><br>
|
Chris@49
|
3854 </td>
|
Chris@49
|
3855 <td style="vertical-align: top;">(member function of <i>Cube</i>)
|
Chris@49
|
3856 </td>
|
Chris@49
|
3857 </tr>
|
Chris@49
|
3858 </tbody>
|
Chris@49
|
3859 </table>
|
Chris@49
|
3860 <br>
|
Chris@49
|
3861 <ul>
|
Chris@49
|
3862 <li>
|
Chris@49
|
3863 Recreate the object according to given size specifications,
|
Chris@49
|
3864 with the elements taken from the previous version of the object,
|
Chris@49
|
3865 either column-wise (dim=0) or row-wise (dim=1);
|
Chris@49
|
3866 the elements in the generated object are placed column-wise (ie. the first column is filled up before filling the second column)
|
Chris@49
|
3867 </li>
|
Chris@49
|
3868 <br>
|
Chris@49
|
3869 <li>
|
Chris@49
|
3870 The layout of the elements in the recreated object will be different to the layout in the previous version of the object
|
Chris@49
|
3871 </li>
|
Chris@49
|
3872 <br>
|
Chris@49
|
3873 <li>
|
Chris@49
|
3874 This function can be used to vectorise a matrix (ie. concatenate all the columns or rows)
|
Chris@49
|
3875 </li>
|
Chris@49
|
3876 <br>
|
Chris@49
|
3877 <li>
|
Chris@49
|
3878 The new total number of elements (according to the specified size) doesn't have to be the same as the previous total number of elements in the object
|
Chris@49
|
3879 </li>
|
Chris@49
|
3880 <br>
|
Chris@49
|
3881 <li>
|
Chris@49
|
3882 If the total number of elements in the previous version of the object is less than the specified size,
|
Chris@49
|
3883 the extra elements in the recreated object are set to zero
|
Chris@49
|
3884 </li>
|
Chris@49
|
3885 <br>
|
Chris@49
|
3886 <li>
|
Chris@49
|
3887 If the total number of elements in the previous version of the object is greater than the specified size,
|
Chris@49
|
3888 only a subset of the elements is taken
|
Chris@49
|
3889 </li>
|
Chris@49
|
3890 <br>
|
Chris@49
|
3891 <li>
|
Chris@49
|
3892 <b>Caveat:</b>
|
Chris@49
|
3893 .reshape() is slower than <a href="#set_size">.set_size()</a>, which doesn't preserve data
|
Chris@49
|
3894 </li>
|
Chris@49
|
3895 <br>
|
Chris@49
|
3896 <li>
|
Chris@49
|
3897 <b>Caveat:</b>
|
Chris@49
|
3898 if you wish to grow/shrink the object while preserving the elements <b>as well as</b> the layout of the elements,
|
Chris@49
|
3899 use <a href="#resize_member">.resize()</a> instead
|
Chris@49
|
3900 </li>
|
Chris@49
|
3901 <br>
|
Chris@49
|
3902 <li>
|
Chris@49
|
3903 Examples:
|
Chris@49
|
3904 <ul>
|
Chris@49
|
3905 <pre>
|
Chris@49
|
3906 mat A = randu<mat>(4,5);
|
Chris@49
|
3907 A.reshape(5,4);
|
Chris@49
|
3908
|
Chris@49
|
3909 // vectorise A into a column vector:
|
Chris@49
|
3910 A.reshape(A.n_elem, 1);
|
Chris@49
|
3911 </pre>
|
Chris@49
|
3912 </ul>
|
Chris@49
|
3913 </li>
|
Chris@49
|
3914 <br>
|
Chris@49
|
3915 <li>See also:
|
Chris@49
|
3916 <ul>
|
Chris@49
|
3917 <li><a href="#resize_member">.resize()</a></li>
|
Chris@49
|
3918 <li><a href="#set_size">.set_size()</a></li>
|
Chris@49
|
3919 <li><a href="#copy_size">.copy_size()</a></li>
|
Chris@49
|
3920 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
3921 <li><a href="#reset">.reset()</a></li>
|
Chris@49
|
3922 <li><a href="#reshape">reshape()</a> (standalone function)</li>
|
Chris@49
|
3923 </ul>
|
Chris@49
|
3924 </li>
|
Chris@49
|
3925 </ul>
|
Chris@49
|
3926 <br>
|
Chris@49
|
3927 <hr class="greyline"><br>
|
Chris@49
|
3928
|
Chris@49
|
3929 <a name="resize_member"></a>
|
Chris@49
|
3930 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
3931 <tbody>
|
Chris@49
|
3932 <tr>
|
Chris@49
|
3933 <td style="vertical-align: top;"><b>.resize(n_elem)</b></td>
|
Chris@49
|
3934 <td style="vertical-align: top;"><br>
|
Chris@49
|
3935 </td>
|
Chris@49
|
3936 <td style="vertical-align: top;">(member function of <i>Col</i>, <i>Row</i>)
|
Chris@49
|
3937 </td>
|
Chris@49
|
3938 </tr>
|
Chris@49
|
3939 <tr>
|
Chris@49
|
3940 <td style="vertical-align: top;"><b>.resize(n_rows, n_cols)</b></td>
|
Chris@49
|
3941 <td style="vertical-align: top;"><br>
|
Chris@49
|
3942 </td>
|
Chris@49
|
3943 <td style="vertical-align: top;">(member function of <i>Mat</i>)
|
Chris@49
|
3944 </td>
|
Chris@49
|
3945 </tr>
|
Chris@49
|
3946 <tr>
|
Chris@49
|
3947 <td style="vertical-align: top;"><b>.resize(n_rows, n_cols, n_slices)</b></td>
|
Chris@49
|
3948 <td style="vertical-align: top;"><br>
|
Chris@49
|
3949 </td>
|
Chris@49
|
3950 <td style="vertical-align: top;">(member function of <i>Cube</i>)
|
Chris@49
|
3951 </td>
|
Chris@49
|
3952 </tr>
|
Chris@49
|
3953 </tbody>
|
Chris@49
|
3954 </table>
|
Chris@49
|
3955 <br>
|
Chris@49
|
3956 <ul>
|
Chris@49
|
3957 <li>
|
Chris@49
|
3958 Recreate the object according to given size specifications, while preserving the elements as well as the layout of the elements
|
Chris@49
|
3959 </li>
|
Chris@49
|
3960 <br>
|
Chris@49
|
3961 <li>
|
Chris@49
|
3962 Can be used for growing or shrinking an object (ie. adding/removing rows, and/or columns, and/or slices)
|
Chris@49
|
3963 </li>
|
Chris@49
|
3964 <br>
|
Chris@49
|
3965 <li>
|
Chris@49
|
3966 <b>Caveat:</b>
|
Chris@49
|
3967 .resize() is slower than <a href="#set_size">.set_size()</a>, which doesn't preserve data
|
Chris@49
|
3968 </li>
|
Chris@49
|
3969 <br>
|
Chris@49
|
3970 <li>
|
Chris@49
|
3971 Examples:
|
Chris@49
|
3972 <ul>
|
Chris@49
|
3973 <pre>
|
Chris@49
|
3974 mat A = randu<mat>(4,5);
|
Chris@49
|
3975 A.resize(7,6);
|
Chris@49
|
3976 </pre>
|
Chris@49
|
3977 </ul>
|
Chris@49
|
3978 </li>
|
Chris@49
|
3979 <br>
|
Chris@49
|
3980 <li>
|
Chris@49
|
3981 This function was added in version 2.4
|
Chris@49
|
3982 </li>
|
Chris@49
|
3983 <br>
|
Chris@49
|
3984 <li>See also:
|
Chris@49
|
3985 <ul>
|
Chris@49
|
3986 <li><a href="#reshape_member">.reshape()</a></li>
|
Chris@49
|
3987 <li><a href="#set_size">.set_size()</a></li>
|
Chris@49
|
3988 <li><a href="#copy_size">.copy_size()</a></li>
|
Chris@49
|
3989 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
3990 <li><a href="#reset">.reset()</a></li>
|
Chris@49
|
3991 <li><a href="#insert">insert rows/cols/slices</a></li>
|
Chris@49
|
3992 <li><a href="#shed">shed rows/cols/slices</a></li>
|
Chris@49
|
3993 <li><a href="#resize">resize()</a> (standalone function)</li>
|
Chris@49
|
3994 </ul>
|
Chris@49
|
3995 </li>
|
Chris@49
|
3996 </ul>
|
Chris@49
|
3997 <br>
|
Chris@49
|
3998 <hr class="greyline"><br>
|
Chris@49
|
3999
|
Chris@49
|
4000 <a name="save_load_mat"></a>
|
Chris@49
|
4001 <b>
|
Chris@49
|
4002 .save(name, file_type = arma_binary)
|
Chris@49
|
4003 <br>
|
Chris@49
|
4004 .save(stream, file_type = arma_binary)
|
Chris@49
|
4005 <br>
|
Chris@49
|
4006 <br>
|
Chris@49
|
4007 .load(name, file_type = auto_detect)
|
Chris@49
|
4008 <br>
|
Chris@49
|
4009 .load(stream, file_type = auto_detect)
|
Chris@49
|
4010 <br>
|
Chris@49
|
4011 <br>
|
Chris@49
|
4012 .quiet_save(name, file_type = arma_binary)
|
Chris@49
|
4013 <br>
|
Chris@49
|
4014 .quiet_save(stream, file_type = arma_binary)
|
Chris@49
|
4015 <br>
|
Chris@49
|
4016 <br>
|
Chris@49
|
4017 .quiet_load(name, file_type = auto_detect)
|
Chris@49
|
4018 <br>
|
Chris@49
|
4019 .quiet_load(stream, file_type = auto_detect)
|
Chris@49
|
4020 </b>
|
Chris@49
|
4021 <ul>
|
Chris@49
|
4022 <li>Member functions of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i> classes</li>
|
Chris@49
|
4023 <br>
|
Chris@49
|
4024 <li>Store/retrieve data in files or streams</li>
|
Chris@49
|
4025 <br>
|
Chris@49
|
4026 <li>On success, <i>save()</i>, <i>load()</i>, <i>quiet_save()</i>, and <i>quite_load()</i> will return a <i>bool</i> set to <i>true</i></li>
|
Chris@49
|
4027 <br>
|
Chris@49
|
4028 <li><i>save()</i> and <i>quiet_save()</i> will return a <i>bool</i> set to <i>false</i> if the saving process fails</li>
|
Chris@49
|
4029 <br>
|
Chris@49
|
4030 <li>
|
Chris@49
|
4031 <i>load()</i> and <i>quiet_load()</i> will return a <i>bool</i> set to <i>false</i> if the loading process fails;
|
Chris@49
|
4032 additionally, the object will be reset so it has no elements
|
Chris@49
|
4033 </li>
|
Chris@49
|
4034 <br>
|
Chris@49
|
4035 <li><i>load()</i> and <i>save()</i> will print warning messages if any problems are encountered</li>
|
Chris@49
|
4036 <br>
|
Chris@49
|
4037 <li><i>quiet_load()</i> and <i>quiet_save()</i> do not print any error messages</li>
|
Chris@49
|
4038 <br>
|
Chris@49
|
4039 <li>
|
Chris@49
|
4040 The following file formats are supported:
|
Chris@49
|
4041 <br>
|
Chris@49
|
4042 <br>
|
Chris@49
|
4043 <ul>
|
Chris@49
|
4044 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
4045 <tbody>
|
Chris@49
|
4046 <tr>
|
Chris@49
|
4047 <td style="vertical-align: top;"><b>auto_detect</b></td>
|
Chris@49
|
4048 <td style="vertical-align: top;"><br>
|
Chris@49
|
4049 </td>
|
Chris@49
|
4050 <td style="vertical-align: top;">
|
Chris@49
|
4051 for <i>load()</i> and <i>quiet_load()</i>:
|
Chris@49
|
4052 try to automatically detect the file type as one of the formats described below.
|
Chris@49
|
4053 This is the default operation.
|
Chris@49
|
4054 <br>
|
Chris@49
|
4055 <br>
|
Chris@49
|
4056 </td>
|
Chris@49
|
4057 </tr>
|
Chris@49
|
4058 <tr>
|
Chris@49
|
4059 <td style="vertical-align: top;"><b>raw_ascii</b></td>
|
Chris@49
|
4060 <td style="vertical-align: top;"><br>
|
Chris@49
|
4061 </td>
|
Chris@49
|
4062 <td style="vertical-align: top;">
|
Chris@49
|
4063 Numerical data stored in raw ASCII format, without a header.
|
Chris@49
|
4064 The numbers are separated by whitespace.
|
Chris@49
|
4065 The number of columns must be the same in each row.
|
Chris@49
|
4066 Cubes are loaded as one slice.
|
Chris@49
|
4067 Data which was saved in Matlab/Octave using the <i>-ascii</i> option can be read in Armadillo, except for complex numbers.
|
Chris@49
|
4068 Complex numbers are stored in standard C++ notation, which is a tuple surrounded by brackets: eg. (1.23,4.56) indicates 1.24 + 4.56i.
|
Chris@49
|
4069 <br>
|
Chris@49
|
4070 <br>
|
Chris@49
|
4071 </td>
|
Chris@49
|
4072 </tr>
|
Chris@49
|
4073 <tr>
|
Chris@49
|
4074 <td style="vertical-align: top;"><b>raw_binary</b></td>
|
Chris@49
|
4075 <td style="vertical-align: top;"><br>
|
Chris@49
|
4076 </td>
|
Chris@49
|
4077 <td style="vertical-align: top;">
|
Chris@49
|
4078 Numerical data stored in machine dependent raw binary format, without a header.
|
Chris@49
|
4079 Matrices are loaded to have one column,
|
Chris@49
|
4080 while cubes are loaded to have one slice with one column.
|
Chris@49
|
4081 The <a href="#reshape_member">.reshape()</a> function can be used to alter the size of the loaded matrix/cube without losing data.
|
Chris@49
|
4082 <br>
|
Chris@49
|
4083 <br>
|
Chris@49
|
4084 </td>
|
Chris@49
|
4085 </tr>
|
Chris@49
|
4086 <tr>
|
Chris@49
|
4087 <td style="vertical-align: top;"><b>arma_ascii</b></td>
|
Chris@49
|
4088 <td style="vertical-align: top;"><br>
|
Chris@49
|
4089 </td>
|
Chris@49
|
4090 <td style="vertical-align: top;">
|
Chris@49
|
4091 Numerical data stored in human readable text format, with a simple header to speed up loading.
|
Chris@49
|
4092 The header indicates the type of matrix as well as the number of rows and columns.
|
Chris@49
|
4093 For cubes, the header additionally specifies the number of slices.
|
Chris@49
|
4094 <br>
|
Chris@49
|
4095 <br>
|
Chris@49
|
4096 </td>
|
Chris@49
|
4097 </tr>
|
Chris@49
|
4098 <tr>
|
Chris@49
|
4099 <td style="vertical-align: top;"><b>arma_binary</b></td>
|
Chris@49
|
4100 <td style="vertical-align: top;"><br>
|
Chris@49
|
4101 </td>
|
Chris@49
|
4102 <td style="vertical-align: top;">
|
Chris@49
|
4103 Numerical data stored in machine dependent binary format, with a simple header to speed up loading.
|
Chris@49
|
4104 The header indicates the type of matrix as well as the number of rows and columns.
|
Chris@49
|
4105 For cubes, the header additionally specifies the number of slices.
|
Chris@49
|
4106 <br>
|
Chris@49
|
4107 <br>
|
Chris@49
|
4108 </td>
|
Chris@49
|
4109 </tr>
|
Chris@49
|
4110 <tr>
|
Chris@49
|
4111 <td style="vertical-align: top;"><b>csv_ascii</b></td>
|
Chris@49
|
4112 <td style="vertical-align: top;"><br>
|
Chris@49
|
4113 </td>
|
Chris@49
|
4114 <td style="vertical-align: top;">
|
Chris@49
|
4115 Numerical data stored in comma separated value (CSV) text format, without a header.
|
Chris@49
|
4116 Applicable to <i>Mat</i> only.
|
Chris@49
|
4117 <br>
|
Chris@49
|
4118 <br>
|
Chris@49
|
4119 </td>
|
Chris@49
|
4120 </tr>
|
Chris@49
|
4121 <tr>
|
Chris@49
|
4122 <td style="vertical-align: top;"><b>hdf5_binary</b></td>
|
Chris@49
|
4123 <td style="vertical-align: top;"><br>
|
Chris@49
|
4124 </td>
|
Chris@49
|
4125 <td style="vertical-align: top;">
|
Chris@49
|
4126 Numerical data stored in portable HDF5 binary format.
|
Chris@49
|
4127 <br>
|
Chris@49
|
4128 <b>Caveat</b>:
|
Chris@49
|
4129 support for HDF5 must be enabled within Armadillo's <a href="#config_hpp">configuration</a>;
|
Chris@49
|
4130 the <i>hdf5.h</i> header file must be available on your system and you will need to link with the hdf5 library (eg. -lhdf5).
|
Chris@49
|
4131 Support for saving & loading of <i>Cube</i> objects was added in version 3.830.
|
Chris@49
|
4132 <br>
|
Chris@49
|
4133 <br>
|
Chris@49
|
4134 </td>
|
Chris@49
|
4135 </tr>
|
Chris@49
|
4136 <tr>
|
Chris@49
|
4137 <td style="vertical-align: top;"><b>pgm_binary</b></td>
|
Chris@49
|
4138 <td style="vertical-align: top;"><br>
|
Chris@49
|
4139 </td>
|
Chris@49
|
4140 <td style="vertical-align: top;">
|
Chris@49
|
4141 Image data stored in Portable Gray Map (PGM) format.
|
Chris@49
|
4142 Applicable to <i>Mat</i> only.
|
Chris@49
|
4143 Saving <i>int</i>, <i>float</i> or <i>double</i> matrices is a lossy operation, as each element is copied and converted to an 8 bit representation.
|
Chris@49
|
4144 As such the matrix should have values in the [0,255] interval, otherwise the resulting image may not display correctly.
|
Chris@49
|
4145 <br>
|
Chris@49
|
4146 <br>
|
Chris@49
|
4147 </td>
|
Chris@49
|
4148 </tr>
|
Chris@49
|
4149 <tr>
|
Chris@49
|
4150 <td style="vertical-align: top;"><b>ppm_binary</b></td>
|
Chris@49
|
4151 <td style="vertical-align: top;"><br>
|
Chris@49
|
4152 </td>
|
Chris@49
|
4153 <td style="vertical-align: top;">
|
Chris@49
|
4154 Image data stored in Portable Pixel Map (PPM) format.
|
Chris@49
|
4155 Applicable to <i>Cube</i> only.
|
Chris@49
|
4156 Saving <i>int</i>, <i>float</i> or <i>double</i> matrices is a lossy operation, as each element is copied and converted to an 8 bit representation.
|
Chris@49
|
4157 As such the cube/field should have values in the [0,255] interval, otherwise the resulting image may not display correctly.
|
Chris@49
|
4158 </td>
|
Chris@49
|
4159 </tr>
|
Chris@49
|
4160 </tbody>
|
Chris@49
|
4161 </table>
|
Chris@49
|
4162 </ul>
|
Chris@49
|
4163 </li>
|
Chris@49
|
4164 <br>
|
Chris@49
|
4165 <br>
|
Chris@49
|
4166 <li>
|
Chris@49
|
4167 Examples:
|
Chris@49
|
4168 <ul>
|
Chris@49
|
4169 <pre>
|
Chris@49
|
4170 mat A = randu<mat>(5,5);
|
Chris@49
|
4171
|
Chris@49
|
4172 A.save("A1.mat"); // default save format is arma_binary
|
Chris@49
|
4173 A.save("A2.mat", arma_ascii);
|
Chris@49
|
4174
|
Chris@49
|
4175 mat B;
|
Chris@49
|
4176 // automatically detect format type
|
Chris@49
|
4177 B.load("A1.mat");
|
Chris@49
|
4178
|
Chris@49
|
4179 mat C;
|
Chris@49
|
4180 // force loading in the arma_ascii format
|
Chris@49
|
4181 C.load("A2.mat", arma_ascii);
|
Chris@49
|
4182
|
Chris@49
|
4183
|
Chris@49
|
4184 // example of saving/loading using a stream
|
Chris@49
|
4185 std::stringstream s;
|
Chris@49
|
4186 A.save(s);
|
Chris@49
|
4187
|
Chris@49
|
4188 mat D;
|
Chris@49
|
4189 D.load(s);
|
Chris@49
|
4190
|
Chris@49
|
4191
|
Chris@49
|
4192 // example of testing for success
|
Chris@49
|
4193 mat E;
|
Chris@49
|
4194 bool status = E.load("A2.mat");
|
Chris@49
|
4195
|
Chris@49
|
4196 if(status == true)
|
Chris@49
|
4197 {
|
Chris@49
|
4198 cout << "loaded okay" << endl;
|
Chris@49
|
4199 }
|
Chris@49
|
4200 else
|
Chris@49
|
4201 {
|
Chris@49
|
4202 cout << "problem with loading" << endl;
|
Chris@49
|
4203 }
|
Chris@49
|
4204 </pre>
|
Chris@49
|
4205 </ul>
|
Chris@49
|
4206 </li>
|
Chris@49
|
4207 <br>
|
Chris@49
|
4208 <li>See also:
|
Chris@49
|
4209 <ul>
|
Chris@49
|
4210 <li><a href="#save_load_field">saving/loading fields</a></li>
|
Chris@49
|
4211 </ul>
|
Chris@49
|
4212 </li>
|
Chris@49
|
4213 <br>
|
Chris@49
|
4214 </ul>
|
Chris@49
|
4215 <hr class="greyline"><br>
|
Chris@49
|
4216
|
Chris@49
|
4217 <a name="save_load_field"></a>
|
Chris@49
|
4218 <b>
|
Chris@49
|
4219 .save(name, file_type = arma_binary)
|
Chris@49
|
4220 <br>
|
Chris@49
|
4221 .save(stream, file_type = arma_binary)
|
Chris@49
|
4222 <br>
|
Chris@49
|
4223 <br>
|
Chris@49
|
4224 .load(name, file_type = auto_detect)
|
Chris@49
|
4225 <br>
|
Chris@49
|
4226 .load(stream, file_type = auto_detect)
|
Chris@49
|
4227 <br>
|
Chris@49
|
4228 <br>
|
Chris@49
|
4229 .quiet_save(name, file_type = arma_binary)
|
Chris@49
|
4230 <br>
|
Chris@49
|
4231 .quiet_save(stream, file_type = arma_binary)
|
Chris@49
|
4232 <br>
|
Chris@49
|
4233 <br>
|
Chris@49
|
4234 .quiet_load(name, file_type = auto_detect)
|
Chris@49
|
4235 <br>
|
Chris@49
|
4236 .quiet_load(stream, file_type = auto_detect)
|
Chris@49
|
4237 </b>
|
Chris@49
|
4238 <ul>
|
Chris@49
|
4239 <li>Member functions of the <i>field</i> class</li>
|
Chris@49
|
4240 <br>
|
Chris@49
|
4241 <li>Store/retrieve fields in files or stream</li>
|
Chris@49
|
4242 <br>
|
Chris@49
|
4243 <li>On success, save(), load(), quiet_save(), and quite_load() will return a <i>bool</i> set to <i>true</i></li>
|
Chris@49
|
4244 <br>
|
Chris@49
|
4245 <li>save() and quiet_save() will return a <i>bool</i> set to <i>false</i> if the saving process fails</li>
|
Chris@49
|
4246 <br>
|
Chris@49
|
4247 <li>
|
Chris@49
|
4248 load() and quiet_load() will return a <i>bool</i> set to <i>false</i> if the loading process fails;
|
Chris@49
|
4249 additionally, the field will be reset so it has no elements
|
Chris@49
|
4250 </li>
|
Chris@49
|
4251 <br>
|
Chris@49
|
4252 <li>load() and save() will print warning messages if any problems are encountered</li>
|
Chris@49
|
4253 <br>
|
Chris@49
|
4254 <li>quiet_load() and quiet_save() do not print any error messages</li>
|
Chris@49
|
4255 <br>
|
Chris@49
|
4256 <li>
|
Chris@49
|
4257 Fields with objects of type <i>std::string</i> are saved and loaded as raw text files.
|
Chris@49
|
4258 The text files do not have a header.
|
Chris@49
|
4259 Each string is separated by a whitespace.
|
Chris@49
|
4260 load() and quiet_load() will only accept text files that have the same number of strings on each line.
|
Chris@49
|
4261 The strings can have variable lengths.
|
Chris@49
|
4262 </li>
|
Chris@49
|
4263 <br>
|
Chris@49
|
4264 <li>
|
Chris@49
|
4265 Other than storing string fields as text files, the following file formats are supported:
|
Chris@49
|
4266 <br>
|
Chris@49
|
4267 <br>
|
Chris@49
|
4268 <ul>
|
Chris@49
|
4269 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
4270 <tbody>
|
Chris@49
|
4271 <tr>
|
Chris@49
|
4272 <td style="vertical-align: top;"><b>auto_detect</b></td>
|
Chris@49
|
4273 <td style="vertical-align: top;"><br>
|
Chris@49
|
4274 </td>
|
Chris@49
|
4275 <td style="vertical-align: top;">
|
Chris@49
|
4276 <br>
|
Chris@49
|
4277 <li>
|
Chris@49
|
4278 load(): try to automatically detect the field format type as one of the formats described below.
|
Chris@49
|
4279 This is the default operation.
|
Chris@49
|
4280 </li>
|
Chris@49
|
4281 <br>
|
Chris@49
|
4282 </td>
|
Chris@49
|
4283 </tr>
|
Chris@49
|
4284 <tr>
|
Chris@49
|
4285 <td style="vertical-align: top;"><b>arma_binary</b></td>
|
Chris@49
|
4286 <td style="vertical-align: top;"><br>
|
Chris@49
|
4287 </td>
|
Chris@49
|
4288 <td style="vertical-align: top;">
|
Chris@49
|
4289 <br>
|
Chris@49
|
4290 <li>
|
Chris@49
|
4291 Objects are stored in machine dependent binary format.
|
Chris@49
|
4292 <li>
|
Chris@49
|
4293 Default type for fields of type <i>Mat</i>, <i>Col</i> or <i>Row</i>.
|
Chris@49
|
4294 </li>
|
Chris@49
|
4295 <li>
|
Chris@49
|
4296 Only applicable to fields of type <i>Mat</i>, <i>Col</i> or <i>Row</i>.
|
Chris@49
|
4297 </li>
|
Chris@49
|
4298 <br>
|
Chris@49
|
4299 </td>
|
Chris@49
|
4300 </tr>
|
Chris@49
|
4301 <tr>
|
Chris@49
|
4302 <td style="vertical-align: top;"><b>ppm_binary</b></td>
|
Chris@49
|
4303 <td style="vertical-align: top;"><br>
|
Chris@49
|
4304 </td>
|
Chris@49
|
4305 <td style="vertical-align: top;">
|
Chris@49
|
4306 <br>
|
Chris@49
|
4307 <li>
|
Chris@49
|
4308 Image data stored in Portable Pixmap Map (PPM) format.
|
Chris@49
|
4309 </li>
|
Chris@49
|
4310 <li>
|
Chris@49
|
4311 Only applicable to fields of type <i>Mat</i>, <i>Col</i> or <i>Row</i>.
|
Chris@49
|
4312 </li>
|
Chris@49
|
4313 <li>
|
Chris@49
|
4314 .load(): Loads the specified image and stores the red, green and blue components as three separate matrices.
|
Chris@49
|
4315 The resulting field is comprised of the three matrices,
|
Chris@49
|
4316 with the red, green and blue components in the first, second and third matrix, respectively.
|
Chris@49
|
4317 </li>
|
Chris@49
|
4318 <li>
|
Chris@49
|
4319 .save(): Saves a field with exactly three matrices of equal size as an image.
|
Chris@49
|
4320 It is assumed that the red, green and blue components are stored in the first, second and third matrix, respectively.
|
Chris@49
|
4321 Saving <i>int</i>, <i>float</i> or <i>double</i> matrices is a lossy operation,
|
Chris@49
|
4322 as each matrix element is copied and converted to an 8 bit representation.
|
Chris@49
|
4323 </li>
|
Chris@49
|
4324
|
Chris@49
|
4325 </td>
|
Chris@49
|
4326 </tr>
|
Chris@49
|
4327 </tbody>
|
Chris@49
|
4328 </table>
|
Chris@49
|
4329 </ul>
|
Chris@49
|
4330 </li>
|
Chris@49
|
4331 <br>
|
Chris@49
|
4332 <li>See also:
|
Chris@49
|
4333 <ul>
|
Chris@49
|
4334 <li><a href="#save_load_mat">saving/loading matrices and cubes</a></li>
|
Chris@49
|
4335 </ul>
|
Chris@49
|
4336 </li>
|
Chris@49
|
4337 <br>
|
Chris@49
|
4338 </ul>
|
Chris@49
|
4339 <hr class="greyline"><br>
|
Chris@49
|
4340
|
Chris@49
|
4341 <a name="set_imag"></a>
|
Chris@49
|
4342 <b>.set_imag(X)</b>
|
Chris@49
|
4343 <br>
|
Chris@49
|
4344 <b>.set_real(X)</b>
|
Chris@49
|
4345 <br>
|
Chris@49
|
4346 <ul>
|
Chris@49
|
4347 <li>Member functions of Mat, Col, Row and Cube</li>
|
Chris@49
|
4348 <br>
|
Chris@49
|
4349 <li>
|
Chris@49
|
4350 Set the imaginary/real part of an object
|
Chris@49
|
4351 </li>
|
Chris@49
|
4352 <br>
|
Chris@49
|
4353 <li>
|
Chris@49
|
4354 <i>X</i> must have the same size as the recipient object
|
Chris@49
|
4355 </li>
|
Chris@49
|
4356 <br>
|
Chris@49
|
4357 <li>
|
Chris@49
|
4358 Examples:
|
Chris@49
|
4359 <ul>
|
Chris@49
|
4360 <pre>
|
Chris@49
|
4361 mat A = randu<mat>(4,5);
|
Chris@49
|
4362 mat B = randu<mat>(4,5);
|
Chris@49
|
4363
|
Chris@49
|
4364 cx_mat C = zeros<cx_mat>(4,5);
|
Chris@49
|
4365
|
Chris@49
|
4366 C.set_real(A);
|
Chris@49
|
4367 C.set_imag(B);
|
Chris@49
|
4368 </pre>
|
Chris@49
|
4369 </ul>
|
Chris@49
|
4370 </li>
|
Chris@49
|
4371 <br>
|
Chris@49
|
4372 <li>
|
Chris@49
|
4373 <b>Caveat:</b>
|
Chris@49
|
4374 if you want to directly construct a complex matrix out of two real matrices,
|
Chris@49
|
4375 the following code is faster:
|
Chris@49
|
4376 <ul>
|
Chris@49
|
4377 <pre>
|
Chris@49
|
4378 mat A = randu<mat>(4,5);
|
Chris@49
|
4379 mat B = randu<mat>(4,5);
|
Chris@49
|
4380
|
Chris@49
|
4381 cx_mat C = cx_mat(A,B);
|
Chris@49
|
4382 </pre>
|
Chris@49
|
4383 </ul>
|
Chris@49
|
4384 </li>
|
Chris@49
|
4385 <br>
|
Chris@49
|
4386 <li>See also:
|
Chris@49
|
4387 <ul>
|
Chris@49
|
4388 <li><a href="#constructors_mat">matrix constructors</a></li>
|
Chris@49
|
4389 <li><a href="#constructors_cube">cube constructors</a></li>
|
Chris@49
|
4390 <li><a href="#imag_real">imag() / real()</a></li>
|
Chris@49
|
4391 </ul>
|
Chris@49
|
4392 </li>
|
Chris@49
|
4393 <br>
|
Chris@49
|
4394 </ul>
|
Chris@49
|
4395 <hr class="greyline"><br>
|
Chris@49
|
4396
|
Chris@49
|
4397 <a name="set_size"></a>
|
Chris@49
|
4398 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
4399 <tbody>
|
Chris@49
|
4400 <tr>
|
Chris@49
|
4401 <td style="vertical-align: top;"><b>.set_size(n_elem)</b></td>
|
Chris@49
|
4402 <td style="vertical-align: top;"><br>
|
Chris@49
|
4403 </td>
|
Chris@49
|
4404 <td style="vertical-align: top;">(member function of <i>Col</i>, <i>Row</i>, and <i>field</i>)
|
Chris@49
|
4405 </td>
|
Chris@49
|
4406 </tr>
|
Chris@49
|
4407 <tr>
|
Chris@49
|
4408 <td style="vertical-align: top;"><b>.set_size(n_rows, n_cols)</b></td>
|
Chris@49
|
4409 <td style="vertical-align: top;"><br>
|
Chris@49
|
4410 </td>
|
Chris@49
|
4411 <td style="vertical-align: top;">(member function of <i>Mat</i> and <i>field</i>)
|
Chris@49
|
4412 </td>
|
Chris@49
|
4413 </tr>
|
Chris@49
|
4414 <tr>
|
Chris@49
|
4415 <td style="vertical-align: top;"><b>.set_size(n_rows, n_cols, n_slices)</b></td>
|
Chris@49
|
4416 <td style="vertical-align: top;"><br>
|
Chris@49
|
4417 </td>
|
Chris@49
|
4418 <td style="vertical-align: top;">(member function of <i>Cube</i>)
|
Chris@49
|
4419 </td>
|
Chris@49
|
4420 </tr>
|
Chris@49
|
4421 </tbody>
|
Chris@49
|
4422 </table>
|
Chris@49
|
4423 <br>
|
Chris@49
|
4424 <ul>
|
Chris@49
|
4425 <li>Changes the size of an object</li>
|
Chris@49
|
4426 <br>
|
Chris@49
|
4427 <li>
|
Chris@49
|
4428 If the requested number of elements is equal to the old number of elements, existing memory is reused
|
Chris@49
|
4429 </li>
|
Chris@49
|
4430 <br>
|
Chris@49
|
4431 <li>
|
Chris@49
|
4432 If the requested number of elements is not equal to the old number of elements, new memory is used;
|
Chris@49
|
4433 the memory is uninitilised
|
Chris@49
|
4434 </li>
|
Chris@49
|
4435 <br>
|
Chris@49
|
4436 <li>
|
Chris@49
|
4437 If you need to initialise the memory, use <a href="#zeros_member">.zeros()</a> instead
|
Chris@49
|
4438 </li>
|
Chris@49
|
4439 <br>
|
Chris@49
|
4440 <li>
|
Chris@49
|
4441 If you need to explicitly preserve data, use <a href="#reshape_member">.reshape()</a> or <a href="#resize_member">.resize()</a>
|
Chris@49
|
4442 </li>
|
Chris@49
|
4443 <br>
|
Chris@49
|
4444 <li>
|
Chris@49
|
4445 Examples:
|
Chris@49
|
4446 <ul>
|
Chris@49
|
4447 <pre>
|
Chris@49
|
4448 mat A;
|
Chris@49
|
4449 A.set_size(5,10);
|
Chris@49
|
4450
|
Chris@49
|
4451 vec q;
|
Chris@49
|
4452 q.set_size(100);
|
Chris@49
|
4453 </pre>
|
Chris@49
|
4454 </ul>
|
Chris@49
|
4455 </li>
|
Chris@49
|
4456 <br>
|
Chris@49
|
4457 <li>See also:
|
Chris@49
|
4458 <ul>
|
Chris@49
|
4459 <li><a href="#reset">.reset()</a></li>
|
Chris@49
|
4460 <li><a href="#copy_size">.copy_size()</a></li>
|
Chris@49
|
4461 <li><a href="#reshape_member">.reshape()</a></li>
|
Chris@49
|
4462 <li><a href="#resize_member">.resize()</a></li>
|
Chris@49
|
4463 <li><a href="#zeros_member">.zeros()</a></li>
|
Chris@49
|
4464 </ul>
|
Chris@49
|
4465 </li>
|
Chris@49
|
4466 </ul>
|
Chris@49
|
4467 <br>
|
Chris@49
|
4468 <hr class="greyline"><br>
|
Chris@49
|
4469
|
Chris@49
|
4470 <a name="shed"></a>
|
Chris@49
|
4471 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
4472 <tbody>
|
Chris@49
|
4473 <tr>
|
Chris@49
|
4474 <td style="vertical-align: top;">
|
Chris@49
|
4475 <b>.shed_row( </b>row_number<b> )</b>
|
Chris@49
|
4476 <br>
|
Chris@49
|
4477 <b>.shed_rows( </b>first_row, last_row<b> )</b>
|
Chris@49
|
4478 </td>
|
Chris@49
|
4479 <td style="vertical-align: top;"><br></td>
|
Chris@49
|
4480 <td style="vertical-align: top;">(member functions of <i>Mat</i> and <i>Col</i>)
|
Chris@49
|
4481 </td>
|
Chris@49
|
4482 </tr>
|
Chris@49
|
4483 <tr>
|
Chris@49
|
4484 <td> </td>
|
Chris@49
|
4485 </tr>
|
Chris@49
|
4486 <tr>
|
Chris@49
|
4487 <td style="vertical-align: top;">
|
Chris@49
|
4488 <b>.shed_col( </b>column_number<b> )</b>
|
Chris@49
|
4489 <br>
|
Chris@49
|
4490 <b>.shed_cols( </b>first_column, last_column<b> )</b>
|
Chris@49
|
4491 </td>
|
Chris@49
|
4492 <td style="vertical-align: top;"><br></td>
|
Chris@49
|
4493 <td style="vertical-align: top;">(member functions of <i>Mat</i> and <i>Row</i>)
|
Chris@49
|
4494 </td>
|
Chris@49
|
4495 </tr>
|
Chris@49
|
4496 <tr>
|
Chris@49
|
4497 <td> </td>
|
Chris@49
|
4498 </tr>
|
Chris@49
|
4499 <tr>
|
Chris@49
|
4500 <td style="vertical-align: top;">
|
Chris@49
|
4501 <b>.shed_slice( </b>slice_number<b> )</b>
|
Chris@49
|
4502 <br>
|
Chris@49
|
4503 <b>.shed_slices( </b>first_slice, last_slice<b> )</b>
|
Chris@49
|
4504 </td>
|
Chris@49
|
4505 <td style="vertical-align: top;"><br></td>
|
Chris@49
|
4506 <td style="vertical-align: top;">(member functions of <i>Cube</i>)
|
Chris@49
|
4507 </td>
|
Chris@49
|
4508 </tr>
|
Chris@49
|
4509 </tbody>
|
Chris@49
|
4510 </table>
|
Chris@49
|
4511 <br>
|
Chris@49
|
4512 <ul>
|
Chris@49
|
4513 <li>
|
Chris@49
|
4514 Single argument functions:
|
Chris@49
|
4515 remove the specified row/column/slice
|
Chris@49
|
4516 </li>
|
Chris@49
|
4517 <br>
|
Chris@49
|
4518 <li>
|
Chris@49
|
4519 Two argument functions:
|
Chris@49
|
4520 remove the specified range of rows/columns/slices
|
Chris@49
|
4521 </li>
|
Chris@49
|
4522 <br>
|
Chris@49
|
4523 <li>
|
Chris@49
|
4524 Examples:
|
Chris@49
|
4525 <ul>
|
Chris@49
|
4526 <pre>
|
Chris@49
|
4527 mat A = randu<mat>(5,10);
|
Chris@49
|
4528
|
Chris@49
|
4529 A.shed_row(2);
|
Chris@49
|
4530 A.shed_cols(2,4);
|
Chris@49
|
4531 </pre>
|
Chris@49
|
4532 </ul>
|
Chris@49
|
4533 </li>
|
Chris@49
|
4534 <br>
|
Chris@49
|
4535 <li>
|
Chris@49
|
4536 See also:
|
Chris@49
|
4537 <ul>
|
Chris@49
|
4538 <li><a href="#insert">insert rows/columns/slices</a></li>
|
Chris@49
|
4539 <li><a href="#join">join rows/columns/slices</a></li>
|
Chris@49
|
4540 <li><a href="#resize_member">.resize()</a></li>
|
Chris@49
|
4541 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
4542 <li><a href="#subcube">subcube views</a></li>
|
Chris@49
|
4543 <li><a href="http://thesaurus.com/browse/shed"><i>shed</i> in thesaurus.com</a></li>
|
Chris@49
|
4544 </ul>
|
Chris@49
|
4545 </li>
|
Chris@49
|
4546 <br>
|
Chris@49
|
4547 </ul>
|
Chris@49
|
4548 <hr class="greyline"><br>
|
Chris@49
|
4549
|
Chris@49
|
4550 <a name="stl_container_fns"></a>
|
Chris@49
|
4551 <b>STL container functions</b>
|
Chris@49
|
4552 <ul>
|
Chris@49
|
4553 <li><i>Mat</i>, <i>Col</i> and <i>Row</i> classes provide the following member functions that mimic the containers in the C++ Standard Template Library:<br>
|
Chris@49
|
4554 <br>
|
Chris@49
|
4555
|
Chris@49
|
4556 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
4557 <tbody>
|
Chris@49
|
4558 <tr>
|
Chris@49
|
4559 <td style="vertical-align: top;">
|
Chris@49
|
4560 <b>.clear()</b>
|
Chris@49
|
4561 </td>
|
Chris@49
|
4562 <td style="vertical-align: top;"> <br>
|
Chris@49
|
4563 </td>
|
Chris@49
|
4564 <td style="vertical-align: top;">
|
Chris@49
|
4565 causes an object to have no elements
|
Chris@49
|
4566 </td>
|
Chris@49
|
4567 </tr>
|
Chris@49
|
4568 <tr>
|
Chris@49
|
4569 <td style="vertical-align: top;">
|
Chris@49
|
4570
|
Chris@49
|
4571 </td>
|
Chris@49
|
4572 <td style="vertical-align: top;"> <br>
|
Chris@49
|
4573 </td>
|
Chris@49
|
4574 <td style="vertical-align: top;">
|
Chris@49
|
4575
|
Chris@49
|
4576 </td>
|
Chris@49
|
4577 </tr>
|
Chris@49
|
4578 <tr>
|
Chris@49
|
4579 <td style="vertical-align: top;">
|
Chris@49
|
4580 <b>.empty()</b>
|
Chris@49
|
4581 </td>
|
Chris@49
|
4582 <td style="vertical-align: top;"> <br>
|
Chris@49
|
4583 </td>
|
Chris@49
|
4584 <td style="vertical-align: top;">
|
Chris@49
|
4585 returns true if the object has no elements; returns false if the object has one or more elements
|
Chris@49
|
4586 </td>
|
Chris@49
|
4587 </tr>
|
Chris@49
|
4588 <tr>
|
Chris@49
|
4589 <td style="vertical-align: top;">
|
Chris@49
|
4590
|
Chris@49
|
4591 </td>
|
Chris@49
|
4592 <td style="vertical-align: top;"> <br>
|
Chris@49
|
4593 </td>
|
Chris@49
|
4594 <td style="vertical-align: top;">
|
Chris@49
|
4595
|
Chris@49
|
4596 </td>
|
Chris@49
|
4597 </tr>
|
Chris@49
|
4598 <tr>
|
Chris@49
|
4599 <td style="vertical-align: top;">
|
Chris@49
|
4600 <b>.size()</b>
|
Chris@49
|
4601 </td>
|
Chris@49
|
4602 <td style="vertical-align: top;"> <br>
|
Chris@49
|
4603 </td>
|
Chris@49
|
4604 <td style="vertical-align: top;">
|
Chris@49
|
4605 returns the total number of elements
|
Chris@49
|
4606 </td>
|
Chris@49
|
4607 </tr>
|
Chris@49
|
4608 </tbody>
|
Chris@49
|
4609 </table>
|
Chris@49
|
4610 </li>
|
Chris@49
|
4611 <br>
|
Chris@49
|
4612 <li>
|
Chris@49
|
4613 Examples:
|
Chris@49
|
4614 <ul>
|
Chris@49
|
4615 <pre>
|
Chris@49
|
4616 mat A = randu<mat>(5,5);
|
Chris@49
|
4617 cout << A.size() << endl;
|
Chris@49
|
4618
|
Chris@49
|
4619 A.clear();
|
Chris@49
|
4620 cout << A.empty() << endl;
|
Chris@49
|
4621 </pre>
|
Chris@49
|
4622 </ul>
|
Chris@49
|
4623 </li>
|
Chris@49
|
4624 <br>
|
Chris@49
|
4625 <li>
|
Chris@49
|
4626 See also:
|
Chris@49
|
4627 <ul>
|
Chris@49
|
4628 <li><a href="#iterators_mat">iterators (matrices)</a></li>
|
Chris@49
|
4629 <li><a href="#attributes">matrix and vector attributes</a></li>
|
Chris@49
|
4630 <li><a href="#is_empty">.is_empty()</a></li>
|
Chris@49
|
4631 <li><a href="#reset">.reset()</a></li>
|
Chris@49
|
4632 </ul>
|
Chris@49
|
4633 </li>
|
Chris@49
|
4634 <br>
|
Chris@49
|
4635 </ul>
|
Chris@49
|
4636 <hr class="greyline"><br>
|
Chris@49
|
4637
|
Chris@49
|
4638 <a name="submat"></a>
|
Chris@49
|
4639 <b>submatrix views</b>
|
Chris@49
|
4640 <ul>
|
Chris@49
|
4641 <li>A collection of member functions of <i>Mat</i>, <i>Col</i> and <i>Row</i> classes that provide read/write access to submatrix views<br>
|
Chris@49
|
4642 <br>
|
Chris@49
|
4643 <li>For a matrix or vector <i>X</i>, the subviews are accessed as:</li>
|
Chris@49
|
4644 <br>
|
Chris@49
|
4645 <ul>
|
Chris@49
|
4646 <li>contiguous views:
|
Chris@49
|
4647 <ul>
|
Chris@49
|
4648 <br>
|
Chris@49
|
4649 X.<b>col( </b>col_number<b> )</b><br>
|
Chris@49
|
4650 X.<b>row( </b>row_number<b> )</b><br>
|
Chris@49
|
4651 <br>
|
Chris@49
|
4652 X.<b>cols( </b>first_col<b>,</b> last_col<b> )</b><br>
|
Chris@49
|
4653 X.<b>rows( </b>first_row<b>,</b> last_row<b> )</b><br>
|
Chris@49
|
4654 <br>
|
Chris@49
|
4655 X<b>(</b> <b>span::all,</b> col_number <b>)</b><br>
|
Chris@49
|
4656 X<b>(</b> <b>span(</b>first_row<b>,</b> last_row<b>),</b> col_number <b>)</b><br>
|
Chris@49
|
4657 <br>
|
Chris@49
|
4658 X<b>(</b> row_number<b>,</b> <b>span::all</b> <b>)</b><br>
|
Chris@49
|
4659 X<b>(</b> row_number<b>,</b> <b>span(</b>first_col<b>,</b> last_col<b>) )</b><br>
|
Chris@49
|
4660 <br>
|
Chris@49
|
4661 X.<b>submat( </b>first_row<b>,</b> first_col<b>,</b> last_row<b>,</b> last_col<b> )</b><br>
|
Chris@49
|
4662 X.<b>submat( span(</b>first_row<b>,</b> last_row<b>), span(</b>first_col<b>,</b> last_col<b>) )</b><br>
|
Chris@49
|
4663 <br>
|
Chris@49
|
4664 X<b>( span(</b>first_row<b>,</b> last_row<b>), span(</b>first_col<b>,</b> last_col<b>) )</b><br>
|
Chris@49
|
4665 <br>
|
Chris@49
|
4666 X.<b>unsafe_col( </b>col_number<b> )</b><br>
|
Chris@49
|
4667 <br>
|
Chris@49
|
4668 V.<b>subvec( </b>first_index<b>,</b> last_index<b> )</b> <i>(for vectors only)</i><br>
|
Chris@49
|
4669 V<b>( span(</b>first_index<b>,</b> last_index<b>) )</b> <i>(for vectors only)</i><br>
|
Chris@49
|
4670 </ul>
|
Chris@49
|
4671 </li>
|
Chris@49
|
4672 <br>
|
Chris@49
|
4673 <li>non-contiguous views (added in version 3.0):
|
Chris@49
|
4674 <ul>
|
Chris@49
|
4675 <br>
|
Chris@49
|
4676 X.<b>elem(</b> vector_of_indices <b>)</b><br>
|
Chris@49
|
4677 X<b>(</b> vector_of_indices <b>)</b> <i>(added in version 3.810)</i><br>
|
Chris@49
|
4678 <br>
|
Chris@49
|
4679 X.<b>cols( </b>vector_of_column_indices<b> )</b><br>
|
Chris@49
|
4680 X.<b>rows( </b>vector_of_row_indices<b> )</b><br>
|
Chris@49
|
4681 <br>
|
Chris@49
|
4682 X<b>(</b> vector_of_row_indices<b>,</b> vector_of_column_indices <b>)</b><br>
|
Chris@49
|
4683 X.<b>submat(</b> vector_of_row_indices<b>,</b> vector_of_column_indices <b>)</b><br>
|
Chris@49
|
4684 <!--X.<b>elem(</b> vector_of_row_indices<b>,</b> vector_of_column_indices <b>)</b><br>-->
|
Chris@49
|
4685 </ul>
|
Chris@49
|
4686 </li>
|
Chris@49
|
4687 </ul>
|
Chris@49
|
4688 <br>
|
Chris@49
|
4689 <li>
|
Chris@49
|
4690 Instances of <i>span::all</i>, to indicate an entire range, can be replaced by <i>span()</i>, where no number is specified
|
Chris@49
|
4691 </li>
|
Chris@49
|
4692 <br>
|
Chris@49
|
4693 <li>
|
Chris@49
|
4694 For functions requiring one or more vector of indices,
|
Chris@49
|
4695 eg. <i>X.submat(vector_of_row_indices,vector_of_column_indices)</i>,
|
Chris@49
|
4696 each vector of indices must be of type <i><a href="#Col">uvec</a></i>.
|
Chris@49
|
4697 </li>
|
Chris@49
|
4698 <br>
|
Chris@49
|
4699 <li>
|
Chris@49
|
4700 In the function <i>X.elem(vector_of_indices)</i>,
|
Chris@49
|
4701 elements specified in <i>vector_of_indices</i> are accessed.
|
Chris@49
|
4702 <i>X</i> is interpreted as one long vector,
|
Chris@49
|
4703 with column-by-column ordering of the elements of <i>X</i>.
|
Chris@49
|
4704 The <i>vector_of_indices</i> must evaluate to be a vector of type <i><a href="#Col">uvec</a></i>
|
Chris@49
|
4705 (eg., generated by <i><a href="#find">find()</a></i>).
|
Chris@49
|
4706 The aggregate set of the specified elements is treated as a column vector
|
Chris@49
|
4707 (eg., the output of <i>X.elem()</i> is always a column vector).
|
Chris@49
|
4708 </li>
|
Chris@49
|
4709 <br>
|
Chris@49
|
4710 <li>
|
Chris@49
|
4711 The function <i>.unsafe_col()</i> is provided for speed reasons and should be used only if you know what you're doing.
|
Chris@49
|
4712 The function creates a seemingly independent <i>Col</i> vector object (eg. <i>vec</i>),
|
Chris@49
|
4713 but the vector actually uses memory from the existing matrix object.
|
Chris@49
|
4714 As such, the created <i>Col</i> vector is currently not alias safe
|
Chris@49
|
4715 and does not take into account that the parent matrix object could be deleted.
|
Chris@49
|
4716 If deleted memory is accessed through the created <i>Col</i> vector,
|
Chris@49
|
4717 it will cause memory corruption and/or a crash.
|
Chris@49
|
4718 </li>
|
Chris@49
|
4719 <br>
|
Chris@49
|
4720 <li>
|
Chris@49
|
4721 Examples:
|
Chris@49
|
4722 <ul>
|
Chris@49
|
4723 <pre>
|
Chris@49
|
4724 mat A = zeros<mat>(5,10);
|
Chris@49
|
4725
|
Chris@49
|
4726 A.submat(0,1,2,3) = randu<mat>(3,3);
|
Chris@49
|
4727
|
Chris@49
|
4728 // the following three statements
|
Chris@49
|
4729 // access the same part of A
|
Chris@49
|
4730 mat B = A.submat(0,1,2,3);
|
Chris@49
|
4731 mat C = A.submat( span(0,2), span(1,3) );
|
Chris@49
|
4732 mat D = A( span(0,2), span(1,3) );
|
Chris@49
|
4733
|
Chris@49
|
4734 // the following two statements
|
Chris@49
|
4735 // access the same part of A
|
Chris@49
|
4736 A.col(1) = randu<mat>(5,1);
|
Chris@49
|
4737 A(span::all, 1) = randu<mat>(5,1);
|
Chris@49
|
4738
|
Chris@49
|
4739 mat X = randu<mat>(5,5);
|
Chris@49
|
4740
|
Chris@49
|
4741 // get all elements of X that are greater than 0.5
|
Chris@49
|
4742 vec q = X.elem( find(X > 0.5) );
|
Chris@49
|
4743
|
Chris@49
|
4744 // set four specific elements of X to 1
|
Chris@49
|
4745 uvec indices;
|
Chris@49
|
4746 indices << 2 << 3 << 6 << 8;
|
Chris@49
|
4747
|
Chris@49
|
4748 X.elem(indices) = ones<vec>(4);
|
Chris@49
|
4749 </pre>
|
Chris@49
|
4750 </ul>
|
Chris@49
|
4751 </li>
|
Chris@49
|
4752 <br>
|
Chris@49
|
4753 <li>
|
Chris@49
|
4754 See also:
|
Chris@49
|
4755 <ul>
|
Chris@49
|
4756 <li><a href="#diag">diagonal views</a> (read/write access to diagonals)</li>
|
Chris@49
|
4757 <li><a href="#each_colrow">.each_col() & .each_row()</a> (vector operations repeated on each column or row)</li>
|
Chris@49
|
4758 <li><a href="#colptr">.colptr()</a></li>
|
Chris@49
|
4759 <li><a href="#in_range">.in_range()</a></li>
|
Chris@49
|
4760 <li><a href="#find">find()</a></li>
|
Chris@49
|
4761 <li><a href="#join">join rows/columns/slices</a></li>
|
Chris@49
|
4762 <li><a href="#shed">shed rows/columns/slices</a></li>
|
Chris@49
|
4763 <li><a href="#insert">insert rows/columns/slices</a></li>
|
Chris@49
|
4764 <li><a href="#subcube">subcube views</a></li>
|
Chris@49
|
4765 </ul>
|
Chris@49
|
4766 </li>
|
Chris@49
|
4767 <br>
|
Chris@49
|
4768 </ul>
|
Chris@49
|
4769 <hr class="greyline"><br>
|
Chris@49
|
4770
|
Chris@49
|
4771 <a name="subcube"></a>
|
Chris@49
|
4772 <b>subcube views and slices</b>
|
Chris@49
|
4773 <ul>
|
Chris@49
|
4774 <li>A collection of member functions of the <i>Cube</i> class that provide subcube views<br>
|
Chris@49
|
4775 <br>
|
Chris@49
|
4776 <li>For a cube <i>Q</i>, the subviews are accessed as:</li>
|
Chris@49
|
4777 <br>
|
Chris@49
|
4778 <ul>
|
Chris@49
|
4779 Q.<b>slice( </b>slice_number <b>)</b><br>
|
Chris@49
|
4780 Q.<b>slices( </b>first_slice<b>,</b> last_slice <b>)</b><br>
|
Chris@49
|
4781 <br>
|
Chris@49
|
4782 Q.<b>subcube( </b>first_row<b>,</b> first_col<b>,</b> first_slice<b>, </b>last_row<b>,</b> last_col<b>, </b>last_slice <b>)</b><br>
|
Chris@49
|
4783 Q.<b>subcube( span(</b>first_row<b>,</b> last_row<b>), span(</b>first_col<b>,</b> last_col<b>), span(</b>first_slice<b>,</b> last_slice<b>) )</b><br>
|
Chris@49
|
4784 <br>
|
Chris@49
|
4785 Q<b>( span(</b>first_row<b>,</b> last_row<b>), span(</b>first_col<b>,</b> last_col<b>), span(</b>first_slice<b>,</b> last_slice<b>) )</b><br>
|
Chris@49
|
4786 </ul>
|
Chris@49
|
4787 </li>
|
Chris@49
|
4788 <br>
|
Chris@49
|
4789 <li>
|
Chris@49
|
4790 Instances of <i>span(a,b)</i> can be replaced by:
|
Chris@49
|
4791 <ul>
|
Chris@49
|
4792 <li><i>span()</i> or <i>span::all</i>, to indicate the entire range</li>
|
Chris@49
|
4793 <li><i>span(a)</i>, to indicate a particular row, column or slice</li>
|
Chris@49
|
4794 </ul>
|
Chris@49
|
4795 </li>
|
Chris@49
|
4796 <br>
|
Chris@49
|
4797 <li>
|
Chris@49
|
4798 An individual slice, accessed via <i>.slice()</i>, is an instance of the <i>Mat</i> class
|
Chris@49
|
4799 (a reference to a matrix is provided)
|
Chris@49
|
4800 </li>
|
Chris@49
|
4801 <br>
|
Chris@49
|
4802 <li>
|
Chris@49
|
4803 Examples:
|
Chris@49
|
4804 <ul>
|
Chris@49
|
4805 <pre>
|
Chris@49
|
4806 cube A = randu<cube>(2,3,4);
|
Chris@49
|
4807 mat B = A.slice(1);
|
Chris@49
|
4808
|
Chris@49
|
4809 A.slice(0) = randu<mat>(2,3);
|
Chris@49
|
4810 A.slice(0)(1,2) = 99.0;
|
Chris@49
|
4811
|
Chris@49
|
4812 A.subcube(0,0,1, 1,1,2) = randu<cube>(2,2,2);
|
Chris@49
|
4813 A( span(0,1), span(0,1), span(1,2) ) = randu<cube>(2,2,2);
|
Chris@49
|
4814
|
Chris@49
|
4815 </pre>
|
Chris@49
|
4816 </ul>
|
Chris@49
|
4817 </li>
|
Chris@49
|
4818 <br>
|
Chris@49
|
4819 <li>
|
Chris@49
|
4820 See also:
|
Chris@49
|
4821 <ul>
|
Chris@49
|
4822 <li><a href="#in_range">.in_range()</a></li>
|
Chris@49
|
4823 <li><a href="#join">join slices</a></li>
|
Chris@49
|
4824 <li><a href="#shed">shed slices</a></li>
|
Chris@49
|
4825 <li><a href="#insert">insert slices</a></li>
|
Chris@49
|
4826 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
4827 </ul>
|
Chris@49
|
4828 </li>
|
Chris@49
|
4829 <br>
|
Chris@49
|
4830 </ul>
|
Chris@49
|
4831 <hr class="greyline"><br>
|
Chris@49
|
4832
|
Chris@49
|
4833 <a name="subfield"></a>
|
Chris@49
|
4834 <b>subfield views</b>
|
Chris@49
|
4835 <ul>
|
Chris@49
|
4836 <li>A collection of member functions of the <i>field</i> class that provide subfield views<br>
|
Chris@49
|
4837 <br>
|
Chris@49
|
4838 <li>For a field <i>F</i>, the subfields are accessed as:</li>
|
Chris@49
|
4839 <br>
|
Chris@49
|
4840 <ul>
|
Chris@49
|
4841 F.<b>row( </b>row_number <b>)</b><br>
|
Chris@49
|
4842 F.<b>col( </b>col_number <b>)</b><br>
|
Chris@49
|
4843 <br>
|
Chris@49
|
4844 F.<b>rows( </b>first_row<b>,</b> last_row <b>)</b><br>
|
Chris@49
|
4845 F.<b>cols( </b>first_col<b>,</b> last_col <b>)</b><br>
|
Chris@49
|
4846 <br>
|
Chris@49
|
4847 F.<b>subfield( </b>first_row<b>,</b> first_col<b>,</b> last_row<b>,</b> last_col <b>)</b><br>
|
Chris@49
|
4848 F.<b>subfield( span(</b>first_row<b>,</b> last_row<b>), span(</b>first_col<b>,</b> last_col<b>) )</b><br>
|
Chris@49
|
4849 <br>
|
Chris@49
|
4850 F<b>( span(</b>first_row<b>,</b> last_row<b>), span(</b>first_col<b>,</b> last_col<b>) )</b><br>
|
Chris@49
|
4851 </ul>
|
Chris@49
|
4852 </li>
|
Chris@49
|
4853 <br>
|
Chris@49
|
4854 <li>
|
Chris@49
|
4855 Instances of <i>span(a,b)</i> can be replaced by:
|
Chris@49
|
4856 <ul>
|
Chris@49
|
4857 <li><i>span()</i> or <i>span::all</i>, to indicate the entire range</li>
|
Chris@49
|
4858 <li><i>span(a)</i>, to indicate a particular row or column</li>
|
Chris@49
|
4859 </ul>
|
Chris@49
|
4860 </li>
|
Chris@49
|
4861 <br>
|
Chris@49
|
4862 <li>
|
Chris@49
|
4863 See also:
|
Chris@49
|
4864 <ul>
|
Chris@49
|
4865 <li><a href="#in_range">.in_range()</a></li>
|
Chris@49
|
4866 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
4867 <li><a href="#subcube">subcube views</a></li>
|
Chris@49
|
4868 </ul>
|
Chris@49
|
4869 </li>
|
Chris@49
|
4870 <br>
|
Chris@49
|
4871 </ul>
|
Chris@49
|
4872 <hr class="greyline"><br>
|
Chris@49
|
4873
|
Chris@49
|
4874 <a name="swap"></a>
|
Chris@49
|
4875 <b>.swap(</b>X<b>)</b>
|
Chris@49
|
4876 <ul>
|
Chris@49
|
4877 <li>
|
Chris@49
|
4878 Swap contents with matrix <i>X</i>
|
Chris@49
|
4879 </li>
|
Chris@49
|
4880 <br>
|
Chris@49
|
4881 <li>
|
Chris@49
|
4882 This function was added in version 3.800
|
Chris@49
|
4883 </li>
|
Chris@49
|
4884 <br>
|
Chris@49
|
4885 <li>
|
Chris@49
|
4886 Examples:
|
Chris@49
|
4887 <ul>
|
Chris@49
|
4888 <pre>
|
Chris@49
|
4889 mat A = zeros<mat>(4,5);
|
Chris@49
|
4890 mat B = ones<mat>(6,7);
|
Chris@49
|
4891
|
Chris@49
|
4892 A.swap(B);
|
Chris@49
|
4893 </pre>
|
Chris@49
|
4894 </ul>
|
Chris@49
|
4895 </li>
|
Chris@49
|
4896 <br>
|
Chris@49
|
4897 <li>
|
Chris@49
|
4898 See also:
|
Chris@49
|
4899 <ul>
|
Chris@49
|
4900 <li><a href="#swap_rows">.swap_rows() & .swap_cols()</a></li>
|
Chris@49
|
4901 </ul>
|
Chris@49
|
4902 </li>
|
Chris@49
|
4903 <br>
|
Chris@49
|
4904 </ul>
|
Chris@49
|
4905 <hr class="greyline"><br>
|
Chris@49
|
4906
|
Chris@49
|
4907 <a name="swap_rows"></a>
|
Chris@49
|
4908 <b>
|
Chris@49
|
4909 .swap_rows(row1, row2)
|
Chris@49
|
4910 <br>.swap_cols(col1, col2)
|
Chris@49
|
4911 </b>
|
Chris@49
|
4912 <ul>
|
Chris@49
|
4913 <li>
|
Chris@49
|
4914 Member functions of <i>Mat</i>, <i>Col</i> and <i>Row</i> classes
|
Chris@49
|
4915 </li>
|
Chris@49
|
4916 <br>
|
Chris@49
|
4917 <li>
|
Chris@49
|
4918 Swap the contents of specified rows or columns
|
Chris@49
|
4919 </li>
|
Chris@49
|
4920 <br>
|
Chris@49
|
4921 <li>
|
Chris@49
|
4922 Examples:
|
Chris@49
|
4923 <ul>
|
Chris@49
|
4924 <pre>
|
Chris@49
|
4925 mat X = randu<mat>(5,5);
|
Chris@49
|
4926 X.swap_rows(0,4);
|
Chris@49
|
4927 </pre>
|
Chris@49
|
4928 </ul>
|
Chris@49
|
4929 </li>
|
Chris@49
|
4930 <br>
|
Chris@49
|
4931 <li>
|
Chris@49
|
4932 See also:
|
Chris@49
|
4933 <ul>
|
Chris@49
|
4934 <li><a href="#flip">fliplr() & flipud()</a></li>
|
Chris@49
|
4935 <li><a href="#swap">.swap()</a></li>
|
Chris@49
|
4936 </ul>
|
Chris@49
|
4937 </li>
|
Chris@49
|
4938 <br>
|
Chris@49
|
4939 </ul>
|
Chris@49
|
4940 <hr class="greyline"><br>
|
Chris@49
|
4941
|
Chris@49
|
4942 <a name="t_st_members"></a>
|
Chris@49
|
4943 <b>
|
Chris@49
|
4944 .t()
|
Chris@49
|
4945 <br>.st()
|
Chris@49
|
4946 </b>
|
Chris@49
|
4947 <ul>
|
Chris@49
|
4948 <li>
|
Chris@49
|
4949 Member functions of any matrix or vector expression
|
Chris@49
|
4950 </li>
|
Chris@49
|
4951 <br>
|
Chris@49
|
4952 <li>
|
Chris@49
|
4953 <i>.t()</i> provides a transposed copy of the object; if a given object has complex elements, a Hermitian transpose is done (ie. the conjugate of the elements is taken during the transpose operation)
|
Chris@49
|
4954 </li>
|
Chris@49
|
4955 <br>
|
Chris@49
|
4956 <li>
|
Chris@49
|
4957 <i>.st()</i> provides a transposed copy of the object, without taking the conjugate of the elements (complex matrices)
|
Chris@49
|
4958 </li>
|
Chris@49
|
4959 <br>
|
Chris@49
|
4960 <li>
|
Chris@49
|
4961 For non-complex objects, the <i>.t()</i> and <i>.st()</i> functions are equivalent
|
Chris@49
|
4962 </li>
|
Chris@49
|
4963 <br>
|
Chris@49
|
4964 <li>
|
Chris@49
|
4965 Examples:
|
Chris@49
|
4966 <ul>
|
Chris@49
|
4967 <pre>
|
Chris@49
|
4968 mat A = randu<mat>(4,5);
|
Chris@49
|
4969 mat B = A.t();
|
Chris@49
|
4970 </pre>
|
Chris@49
|
4971 </ul>
|
Chris@49
|
4972 </li>
|
Chris@49
|
4973 <br>
|
Chris@49
|
4974 <li>
|
Chris@49
|
4975 The <i>.t()</i> and <i>.st()</i> functions were added in version 2.4
|
Chris@49
|
4976 </li>
|
Chris@49
|
4977 <br>
|
Chris@49
|
4978 <li>
|
Chris@49
|
4979 See also:
|
Chris@49
|
4980 <ul>
|
Chris@49
|
4981 <li><a href="#trans">trans()</a></li>
|
Chris@49
|
4982 <li><a href="#strans">strans()</a></li>
|
Chris@49
|
4983 </ul>
|
Chris@49
|
4984 </li>
|
Chris@49
|
4985 <br>
|
Chris@49
|
4986 </ul>
|
Chris@49
|
4987 <hr class="greyline"><br>
|
Chris@49
|
4988
|
Chris@49
|
4989 <a name="transform"></a>
|
Chris@49
|
4990 <b>.transform( </b>functor<b> )</b>
|
Chris@49
|
4991 <br>
|
Chris@49
|
4992 <b>.transform( </b>lambda function<b> )</b> <i>(C++11 only)</i>
|
Chris@49
|
4993 <br>
|
Chris@49
|
4994 <ul>
|
Chris@49
|
4995 <li>
|
Chris@49
|
4996 Transform each element using a functor or lambda function
|
Chris@49
|
4997 </li>
|
Chris@49
|
4998 <br>
|
Chris@49
|
4999 <li>
|
Chris@49
|
5000 For matrices, transformation is done column-by-column (ie. column 0 is transformed, then column 1, ...)
|
Chris@49
|
5001 </li>
|
Chris@49
|
5002 <br>
|
Chris@49
|
5003 <li>
|
Chris@49
|
5004 For cubes, transformation is done slice-by-slice; each slice is transformed column-by-column
|
Chris@49
|
5005 </li>
|
Chris@49
|
5006 <br>
|
Chris@49
|
5007 <li>
|
Chris@49
|
5008 This function was added in version 3.800
|
Chris@49
|
5009 </li>
|
Chris@49
|
5010 <br>
|
Chris@49
|
5011 <li>
|
Chris@49
|
5012 Examples:
|
Chris@49
|
5013 <ul>
|
Chris@49
|
5014 <pre>
|
Chris@49
|
5015 // C++11 only example
|
Chris@49
|
5016
|
Chris@49
|
5017 mat A = ones<mat>(4,5);
|
Chris@49
|
5018
|
Chris@49
|
5019 // add 123 to every element
|
Chris@49
|
5020 A.transform( [](double val) { return (val + 123.0); } );
|
Chris@49
|
5021 </pre>
|
Chris@49
|
5022 </ul>
|
Chris@49
|
5023 </li>
|
Chris@49
|
5024 <br>
|
Chris@49
|
5025 <li>
|
Chris@49
|
5026 See also:
|
Chris@49
|
5027 <ul>
|
Chris@49
|
5028 <li><a href="#operators">overloaded operators</a></li>
|
Chris@49
|
5029 <li><a href="#imbue">.imbue()</a></li>
|
Chris@49
|
5030 <li><a href="#fill">.fill()</a></li>
|
Chris@49
|
5031 <li><a href="http://en.wikipedia.org/wiki/Function_object">function object</a> at Wikipedia</li>
|
Chris@49
|
5032 <li><a href="http://en.wikipedia.org/wiki/C%2B%2B11#Lambda_functions_and_expressions">C++11 lambda functions</a> at Wikipedia</li>
|
Chris@49
|
5033 <li><a href="http://www.cprogramming.com/c++11/c++11-lambda-closures.html">lambda function</a> at cprogramming.com</li>
|
Chris@49
|
5034 </ul>
|
Chris@49
|
5035 </li>
|
Chris@49
|
5036 <br>
|
Chris@49
|
5037 </ul>
|
Chris@49
|
5038 <hr class="greyline"><br>
|
Chris@49
|
5039
|
Chris@49
|
5040 <a name="zeros_member"></a>
|
Chris@49
|
5041 <b>.zeros()</b>
|
Chris@49
|
5042 <br><b>.zeros(n_elem)</b>
|
Chris@49
|
5043 <br><b>.zeros(n_rows, n_cols)</b>
|
Chris@49
|
5044 <br><b>.zeros(n_rows, n_cols, n_slices)</b>
|
Chris@49
|
5045 <ul>
|
Chris@49
|
5046 <li>
|
Chris@49
|
5047 Set the elements of an object to zero, optionally first resizing to specified dimensions
|
Chris@49
|
5048 </li>
|
Chris@49
|
5049 <br>
|
Chris@49
|
5050 <li>
|
Chris@49
|
5051 <i>.zeros()</i> and <i>.zeros(n_elem)</i> are member function of <i>Col</i> and <i>Row</i>
|
Chris@49
|
5052 </li>
|
Chris@49
|
5053 <br>
|
Chris@49
|
5054 <li>
|
Chris@49
|
5055 <i>.zeros()</i> and <i>.zeros(n_rows, n_cols)</i> are member functions of <i>Mat</i>
|
Chris@49
|
5056 </li>
|
Chris@49
|
5057 <br>
|
Chris@49
|
5058 <li>
|
Chris@49
|
5059 <i>.zeros()</i> and <i>.zeros(n_rows, n_cols, n_slices)</i> are member functions of <i>Cube</i>
|
Chris@49
|
5060 </li>
|
Chris@49
|
5061 <br>
|
Chris@49
|
5062 <li>
|
Chris@49
|
5063 Examples:
|
Chris@49
|
5064 <ul>
|
Chris@49
|
5065 <pre>
|
Chris@49
|
5066 mat A = randu<mat>(5,10);
|
Chris@49
|
5067 A.zeros(); // sets all elements to zero
|
Chris@49
|
5068 A.zeros(10,20); // sets the size to 10 rows and 20 columns
|
Chris@49
|
5069 // followed by setting all elements to zero
|
Chris@49
|
5070 </pre>
|
Chris@49
|
5071 </ul>
|
Chris@49
|
5072 </li>
|
Chris@49
|
5073 <br>
|
Chris@49
|
5074 <li>
|
Chris@49
|
5075 See also:
|
Chris@49
|
5076 <ul>
|
Chris@49
|
5077 <li><a href="#zeros_standalone">zeros()</a> (standalone function)</li>
|
Chris@49
|
5078 <li><a href="#ones_member">.ones()</a></li>
|
Chris@49
|
5079 <li><a href="#randu_randn_member">.randu()</a></li>
|
Chris@49
|
5080 <li><a href="#fill">.fill()</a></li>
|
Chris@49
|
5081 <li><a href="#imbue">.imbue()</a></li>
|
Chris@49
|
5082 <li><a href="#reset">.reset()</a></li>
|
Chris@49
|
5083 <li><a href="#set_size">.set_size()</a></li>
|
Chris@49
|
5084 </ul>
|
Chris@49
|
5085 </li>
|
Chris@49
|
5086 <br>
|
Chris@49
|
5087 </ul>
|
Chris@49
|
5088 <hr class="greyline">
|
Chris@49
|
5089
|
Chris@49
|
5090
|
Chris@49
|
5091 <hr class="greyline">
|
Chris@49
|
5092 <br>
|
Chris@49
|
5093 <br>
|
Chris@49
|
5094 <font size=+1><b>Other Classes</b></font>
|
Chris@49
|
5095 <br>
|
Chris@49
|
5096 <br>
|
Chris@49
|
5097 <hr class="greyline">
|
Chris@49
|
5098 <br>
|
Chris@49
|
5099
|
Chris@49
|
5100 <a name="running_stat"></a>
|
Chris@49
|
5101 <b>running_stat<</b><i>type</i><b>></b>
|
Chris@49
|
5102 <ul>
|
Chris@49
|
5103 <li>
|
Chris@49
|
5104 Class for keeping statistics of a continuously sampled one dimensional process/signal.
|
Chris@49
|
5105 Useful if the storage of individual samples (scalars) is not necessary or desired.
|
Chris@49
|
5106 Also useful if the number of samples is not known beforehand or exceeds available memory.
|
Chris@49
|
5107 </li>
|
Chris@49
|
5108 <br>
|
Chris@49
|
5109 <li>
|
Chris@49
|
5110 <i>type</i> should be one of: <i>float</i>, <i>double</i>, <i><a href="#cx_float_double">cx_float</a></i>, <i><a href="#cx_float_double">cx_double</a></i>
|
Chris@49
|
5111 </li>
|
Chris@49
|
5112 <br>
|
Chris@49
|
5113 <li>
|
Chris@49
|
5114 Member functions:
|
Chris@49
|
5115 <ul>
|
Chris@49
|
5116 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
5117 <tbody>
|
Chris@49
|
5118 <tr>
|
Chris@49
|
5119 <td style="vertical-align: top;">
|
Chris@49
|
5120 <b>.operator()(</b>scalar<b>)</b>
|
Chris@49
|
5121 </td>
|
Chris@49
|
5122 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5123 </td>
|
Chris@49
|
5124 <td style="vertical-align: top;">
|
Chris@49
|
5125 update the statistics so far using the given scalar
|
Chris@49
|
5126 </td>
|
Chris@49
|
5127 </tr>
|
Chris@49
|
5128 <tr>
|
Chris@49
|
5129 <td style="vertical-align: top;">
|
Chris@49
|
5130 <b>.mean()</b>
|
Chris@49
|
5131 </td>
|
Chris@49
|
5132 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5133 </td>
|
Chris@49
|
5134 <td style="vertical-align: top;">
|
Chris@49
|
5135 get the mean or average value so far
|
Chris@49
|
5136 </td>
|
Chris@49
|
5137 </tr>
|
Chris@49
|
5138 <tr>
|
Chris@49
|
5139 <td style="vertical-align: top;">
|
Chris@49
|
5140 <b>.var(</b>norm_type=0<b>)</b>
|
Chris@49
|
5141 </td>
|
Chris@49
|
5142 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5143 </td>
|
Chris@49
|
5144 <td style="vertical-align: top;">
|
Chris@49
|
5145 get the variance so far
|
Chris@49
|
5146 </td>
|
Chris@49
|
5147 </tr>
|
Chris@49
|
5148 <tr>
|
Chris@49
|
5149 <td style="vertical-align: top;">
|
Chris@49
|
5150 <b>.stddev(</b>norm_type=0<b>)</b>
|
Chris@49
|
5151 </td>
|
Chris@49
|
5152 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5153 </td>
|
Chris@49
|
5154 <td style="vertical-align: top;">
|
Chris@49
|
5155 get the standard deviation so far
|
Chris@49
|
5156 </td>
|
Chris@49
|
5157 </tr>
|
Chris@49
|
5158 <tr>
|
Chris@49
|
5159 <td style="vertical-align: top;">
|
Chris@49
|
5160 <b>.min()</b>
|
Chris@49
|
5161 </td>
|
Chris@49
|
5162 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5163 </td>
|
Chris@49
|
5164 <td style="vertical-align: top;">
|
Chris@49
|
5165 get the minimum value so far
|
Chris@49
|
5166 </td>
|
Chris@49
|
5167 </tr>
|
Chris@49
|
5168 <tr>
|
Chris@49
|
5169 <td style="vertical-align: top;">
|
Chris@49
|
5170 <b>.max()</b>
|
Chris@49
|
5171 </td>
|
Chris@49
|
5172 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5173 </td>
|
Chris@49
|
5174 <td style="vertical-align: top;">
|
Chris@49
|
5175 get the maximum value so far
|
Chris@49
|
5176 </td>
|
Chris@49
|
5177 </tr>
|
Chris@49
|
5178 <tr>
|
Chris@49
|
5179 <td style="vertical-align: top;">
|
Chris@49
|
5180 <b>.reset()</b>
|
Chris@49
|
5181 </td>
|
Chris@49
|
5182 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5183 </td>
|
Chris@49
|
5184 <td style="vertical-align: top;">
|
Chris@49
|
5185 reset all statistics and set the number of samples to zero
|
Chris@49
|
5186 </td>
|
Chris@49
|
5187 </tr>
|
Chris@49
|
5188 <tr>
|
Chris@49
|
5189 <td style="vertical-align: top;">
|
Chris@49
|
5190 <b>.count()</b>
|
Chris@49
|
5191 </td>
|
Chris@49
|
5192 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5193 </td>
|
Chris@49
|
5194 <td style="vertical-align: top;">
|
Chris@49
|
5195 get the number of samples so far
|
Chris@49
|
5196 </td>
|
Chris@49
|
5197 </tr>
|
Chris@49
|
5198 </tbody>
|
Chris@49
|
5199 </table>
|
Chris@49
|
5200 </ul>
|
Chris@49
|
5201 </li>
|
Chris@49
|
5202 <br>
|
Chris@49
|
5203 <li>
|
Chris@49
|
5204 For the .var() and .stddev() functions, the default <i>norm_type=0</i> performs normalisation using <i>N-1</i>
|
Chris@49
|
5205 (where <i>N</i> is the number of samples so far),
|
Chris@49
|
5206 providing the best unbiased estimator.
|
Chris@49
|
5207 Using <i>norm_type=1</i> causes normalisation to be done using <i>N</i>, which provides the second moment around the mean.
|
Chris@49
|
5208 </li>
|
Chris@49
|
5209 <br>
|
Chris@49
|
5210 <li>
|
Chris@49
|
5211 The return type of .count() depends on the underlying form of <i>type</i>: it is either <i>float</i> or <i>double</i>.
|
Chris@49
|
5212 </li>
|
Chris@49
|
5213 <br>
|
Chris@49
|
5214 <li>
|
Chris@49
|
5215 Examples:
|
Chris@49
|
5216 <ul>
|
Chris@49
|
5217 <pre>
|
Chris@49
|
5218 running_stat<double> stats;
|
Chris@49
|
5219
|
Chris@49
|
5220 for(uword i=0; i<10000; ++i)
|
Chris@49
|
5221 {
|
Chris@49
|
5222 double sample = double(rand())/RAND_MAX;
|
Chris@49
|
5223 stats(sample);
|
Chris@49
|
5224 }
|
Chris@49
|
5225
|
Chris@49
|
5226 cout << "mean = " << stats.mean() << endl;
|
Chris@49
|
5227 cout << "var = " << stats.var() << endl;
|
Chris@49
|
5228 cout << "min = " << stats.min() << endl;
|
Chris@49
|
5229 cout << "max = " << stats.max() << endl;
|
Chris@49
|
5230 </pre>
|
Chris@49
|
5231 </ul>
|
Chris@49
|
5232 </li>
|
Chris@49
|
5233 <br>
|
Chris@49
|
5234 <li>See also:
|
Chris@49
|
5235 <ul>
|
Chris@49
|
5236 <li><a href="#stats_fns">statistics functions</a></li>
|
Chris@49
|
5237 <li><a href="#running_stat_vec">running_stat_vec</a></li>
|
Chris@49
|
5238 </ul>
|
Chris@49
|
5239 </li>
|
Chris@49
|
5240 </ul>
|
Chris@49
|
5241 <br>
|
Chris@49
|
5242 <hr class="greyline"><br>
|
Chris@49
|
5243
|
Chris@49
|
5244 <a name="running_stat_vec"></a>
|
Chris@49
|
5245 <b>running_stat_vec<</b><i>type</i><b>>(calc_cov = false)</b>
|
Chris@49
|
5246 <ul>
|
Chris@49
|
5247 <li>
|
Chris@49
|
5248 Class for keeping statistics of a continuously sampled multi-dimensional process/signal.
|
Chris@49
|
5249 Useful if the storage of individual samples is not necessary or desired.
|
Chris@49
|
5250 Also useful if the number of samples is not known beforehand or exceeds available memory.
|
Chris@49
|
5251 </li>
|
Chris@49
|
5252 <br>
|
Chris@49
|
5253 <li>
|
Chris@49
|
5254 This class is similar to <i>running_stat</i>, with the difference being that vectors are processed instead of single values.
|
Chris@49
|
5255 </li>
|
Chris@49
|
5256 <br>
|
Chris@49
|
5257 <li>
|
Chris@49
|
5258 <i>type</i> must match the element type used by the sample vectors
|
Chris@49
|
5259 (ie. it must be one of <i>float</i>, <i>double</i>, <i><a href="#cx_float_double">cx_float</a></i>, <i><a href="#cx_float_double">cx_double</a></i>)
|
Chris@49
|
5260 </li>
|
Chris@49
|
5261 <br>
|
Chris@49
|
5262 <li>
|
Chris@49
|
5263 <i>type</i> can be inferred via the use of the <i>elem_type</i> member typedef of a vector class.
|
Chris@49
|
5264 For example, <i>fvec::elem_type</i> will be interpreted as <i>float</i>,
|
Chris@49
|
5265 while <i>cx_vec::elem_type</i> will be interpreted as <i><a href="#cx_float_double">cx_double</a></i>.
|
Chris@49
|
5266 </li>
|
Chris@49
|
5267 <br>
|
Chris@49
|
5268 <li>
|
Chris@49
|
5269 Member functions:
|
Chris@49
|
5270 <ul>
|
Chris@49
|
5271 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
5272 <tbody>
|
Chris@49
|
5273 <tr>
|
Chris@49
|
5274 <td style="vertical-align: top;">
|
Chris@49
|
5275 <b>.operator()(</b>vector<b>)</b>
|
Chris@49
|
5276 </td>
|
Chris@49
|
5277 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5278 </td>
|
Chris@49
|
5279 <td style="vertical-align: top;">
|
Chris@49
|
5280 update the statistics so far using the given vector
|
Chris@49
|
5281 </td>
|
Chris@49
|
5282 </tr>
|
Chris@49
|
5283 <tr>
|
Chris@49
|
5284 <td style="vertical-align: top;">
|
Chris@49
|
5285 <b>.mean()</b>
|
Chris@49
|
5286 </td>
|
Chris@49
|
5287 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5288 </td>
|
Chris@49
|
5289 <td style="vertical-align: top;">
|
Chris@49
|
5290 get the mean vector so far
|
Chris@49
|
5291 </td>
|
Chris@49
|
5292 </tr>
|
Chris@49
|
5293 <tr>
|
Chris@49
|
5294 <td style="vertical-align: top;">
|
Chris@49
|
5295 <b>.var(</b>norm_type=0<b>)</b>
|
Chris@49
|
5296 </td>
|
Chris@49
|
5297 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5298 </td>
|
Chris@49
|
5299 <td style="vertical-align: top;">
|
Chris@49
|
5300 get the vector of variances so far
|
Chris@49
|
5301 </td>
|
Chris@49
|
5302 </tr>
|
Chris@49
|
5303 <tr>
|
Chris@49
|
5304 <td style="vertical-align: top;">
|
Chris@49
|
5305 <b>.stddev(</b>norm_type=0<b>)</b>
|
Chris@49
|
5306 </td>
|
Chris@49
|
5307 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5308 </td>
|
Chris@49
|
5309 <td style="vertical-align: top;">
|
Chris@49
|
5310 get the vector of standard deviations so far
|
Chris@49
|
5311 </td>
|
Chris@49
|
5312 </tr>
|
Chris@49
|
5313 <tr>
|
Chris@49
|
5314 <td style="vertical-align: top;">
|
Chris@49
|
5315 <b>.min()</b>
|
Chris@49
|
5316 </td>
|
Chris@49
|
5317 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5318 </td>
|
Chris@49
|
5319 <td style="vertical-align: top;">
|
Chris@49
|
5320 get the vector of minimum values so far
|
Chris@49
|
5321 </td>
|
Chris@49
|
5322 </tr>
|
Chris@49
|
5323 <tr>
|
Chris@49
|
5324 <td style="vertical-align: top;">
|
Chris@49
|
5325 <b>.max()</b>
|
Chris@49
|
5326 </td>
|
Chris@49
|
5327 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5328 </td>
|
Chris@49
|
5329 <td style="vertical-align: top;">
|
Chris@49
|
5330 get the vector of maximum values so far
|
Chris@49
|
5331 </td>
|
Chris@49
|
5332 </tr>
|
Chris@49
|
5333 <tr>
|
Chris@49
|
5334 <td style="vertical-align: top;">
|
Chris@49
|
5335 <b>.cov(</b>norm_type=0<b>)</b>
|
Chris@49
|
5336 </td>
|
Chris@49
|
5337 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5338 </td>
|
Chris@49
|
5339 <td style="vertical-align: top;">
|
Chris@49
|
5340 get the covariance matrix so far
|
Chris@49
|
5341 <br>NOTE: this only works if <i>calc_cov</i> is set to <i>true</i> during the construction of the class
|
Chris@49
|
5342 </td>
|
Chris@49
|
5343 </tr>
|
Chris@49
|
5344 <tr>
|
Chris@49
|
5345 <td style="vertical-align: top;">
|
Chris@49
|
5346 <b>.reset()</b>
|
Chris@49
|
5347 </td>
|
Chris@49
|
5348 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5349 </td>
|
Chris@49
|
5350 <td style="vertical-align: top;">
|
Chris@49
|
5351 reset all statistics and set the number of samples to zero
|
Chris@49
|
5352 </td>
|
Chris@49
|
5353 </tr>
|
Chris@49
|
5354 <tr>
|
Chris@49
|
5355 <td style="vertical-align: top;">
|
Chris@49
|
5356 <b>.count()</b>
|
Chris@49
|
5357 </td>
|
Chris@49
|
5358 <td style="vertical-align: top;"> <br>
|
Chris@49
|
5359 </td>
|
Chris@49
|
5360 <td style="vertical-align: top;">
|
Chris@49
|
5361 get the number of samples so far
|
Chris@49
|
5362 </td>
|
Chris@49
|
5363 </tr>
|
Chris@49
|
5364 </tbody>
|
Chris@49
|
5365 </table>
|
Chris@49
|
5366 </ul>
|
Chris@49
|
5367 </li>
|
Chris@49
|
5368 <br>
|
Chris@49
|
5369 <li>
|
Chris@49
|
5370 For the .var() and .stddev() functions, the default <i>norm_type=0</i> performs normalisation using <i>N-1</i>
|
Chris@49
|
5371 (where <i>N</i> is the number of samples so far),
|
Chris@49
|
5372 providing the best unbiased estimator.
|
Chris@49
|
5373 Using <i>norm_type=1</i> causes normalisation to be done using <i>N</i>, which provides the second moment around the mean.
|
Chris@49
|
5374 </li>
|
Chris@49
|
5375 <br>
|
Chris@49
|
5376 <li>
|
Chris@49
|
5377 The return type of .count() depends on the underlying form of <i>type</i>: it is either <i>float</i> or <i>double</i>.
|
Chris@49
|
5378 </li>
|
Chris@49
|
5379 <br>
|
Chris@49
|
5380 <li>
|
Chris@49
|
5381 Examples:
|
Chris@49
|
5382 <ul>
|
Chris@49
|
5383 <pre>
|
Chris@49
|
5384 running_stat_vec<rowvec::elem_type> stats;
|
Chris@49
|
5385
|
Chris@49
|
5386 rowvec sample;
|
Chris@49
|
5387
|
Chris@49
|
5388 for(uword i=0; i<10000; ++i)
|
Chris@49
|
5389 {
|
Chris@49
|
5390 sample = randu<rowvec>(5);
|
Chris@49
|
5391 stats(sample);
|
Chris@49
|
5392 }
|
Chris@49
|
5393
|
Chris@49
|
5394 cout << "mean = " << stats.mean() << endl;
|
Chris@49
|
5395 cout << "var = " << stats.var() << endl;
|
Chris@49
|
5396 cout << "min = " << stats.min() << endl;
|
Chris@49
|
5397 cout << "max = " << stats.max() << endl;
|
Chris@49
|
5398
|
Chris@49
|
5399 //
|
Chris@49
|
5400 //
|
Chris@49
|
5401
|
Chris@49
|
5402 running_stat_vec<rowvec::elem_type> more_stats(true);
|
Chris@49
|
5403
|
Chris@49
|
5404 for(uword i=0; i<20; ++i)
|
Chris@49
|
5405 {
|
Chris@49
|
5406 sample = randu<rowvec>(3);
|
Chris@49
|
5407
|
Chris@49
|
5408 sample(1) -= sample(0);
|
Chris@49
|
5409 sample(2) += sample(1);
|
Chris@49
|
5410
|
Chris@49
|
5411 more_stats(sample);
|
Chris@49
|
5412 }
|
Chris@49
|
5413
|
Chris@49
|
5414 cout << "covariance matrix = " << endl;
|
Chris@49
|
5415 cout << more_stats.cov() << endl;
|
Chris@49
|
5416
|
Chris@49
|
5417 rowvec sd = more_stats.stddev();
|
Chris@49
|
5418
|
Chris@49
|
5419 cout << "correlations = " << endl;
|
Chris@49
|
5420 cout << more_stats.cov() / (sd.t() * sd);
|
Chris@49
|
5421 </pre>
|
Chris@49
|
5422 </ul>
|
Chris@49
|
5423 </li>
|
Chris@49
|
5424 <br>
|
Chris@49
|
5425 <li>See also:
|
Chris@49
|
5426 <ul>
|
Chris@49
|
5427 <li><a href="#cov">cov()</a></li>
|
Chris@49
|
5428 <li><a href="#cor">cor()</a></li>
|
Chris@49
|
5429 <li><a href="#running_stat">running_stat</a></li>
|
Chris@49
|
5430 <li><a href="#stats_fns">statistics functions</a></li>
|
Chris@49
|
5431 </ul>
|
Chris@49
|
5432 </li>
|
Chris@49
|
5433 </ul>
|
Chris@49
|
5434 <br>
|
Chris@49
|
5435 <hr class="greyline"><br>
|
Chris@49
|
5436
|
Chris@49
|
5437 <a name="wall_clock"></a>
|
Chris@49
|
5438 <b>wall_clock</b>
|
Chris@49
|
5439 <ul>
|
Chris@49
|
5440 <li>
|
Chris@49
|
5441 Simple wall clock timer class, for measuring the number of elapsed seconds between two intervals
|
Chris@49
|
5442 </li>
|
Chris@49
|
5443 <br>
|
Chris@49
|
5444 <li>
|
Chris@49
|
5445 Examples:
|
Chris@49
|
5446 <ul>
|
Chris@49
|
5447 <pre>
|
Chris@49
|
5448 wall_clock timer;
|
Chris@49
|
5449
|
Chris@49
|
5450 mat A = randu<mat>(4,4);
|
Chris@49
|
5451 mat B = randu<mat>(4,4);
|
Chris@49
|
5452 mat C;
|
Chris@49
|
5453
|
Chris@49
|
5454 timer.tic();
|
Chris@49
|
5455 for(uword i=0; i<100000; ++i)
|
Chris@49
|
5456 C = A + B + A + B;
|
Chris@49
|
5457
|
Chris@49
|
5458 double n_secs = timer.toc();
|
Chris@49
|
5459 cout << "took " << n_secs << " seconds" << endl;
|
Chris@49
|
5460 </pre>
|
Chris@49
|
5461 </ul>
|
Chris@49
|
5462 </li>
|
Chris@49
|
5463 </ul>
|
Chris@49
|
5464 <br>
|
Chris@49
|
5465 <hr class="greyline">
|
Chris@49
|
5466
|
Chris@49
|
5467 <hr class="greyline">
|
Chris@49
|
5468 <br>
|
Chris@49
|
5469 <br>
|
Chris@49
|
5470 <font size=+1><b>Generated Vectors/Matrices</b></font>
|
Chris@49
|
5471 <br>
|
Chris@49
|
5472 <br>
|
Chris@49
|
5473 <hr class="greyline">
|
Chris@49
|
5474 <br>
|
Chris@49
|
5475
|
Chris@49
|
5476 <a name="eye_standalone"></a>
|
Chris@49
|
5477 <b>eye(n_rows, n_cols)</b>
|
Chris@49
|
5478 <ul>
|
Chris@49
|
5479 <li>
|
Chris@49
|
5480 Generate a matrix with the elements along the main diagonal set to one
|
Chris@49
|
5481 and off-diagonal elements set to zero
|
Chris@49
|
5482 </li>
|
Chris@49
|
5483 <br>
|
Chris@49
|
5484 <li>
|
Chris@49
|
5485 An identity matrix is generated when <i>n_rows</i> = <i>n_cols</i>
|
Chris@49
|
5486 </li>
|
Chris@49
|
5487 <br>
|
Chris@49
|
5488 <li>
|
Chris@49
|
5489 Usage:
|
Chris@49
|
5490 <ul>
|
Chris@49
|
5491 <li>
|
Chris@49
|
5492 <i>matrix_type</i> X = eye<<i>matrix_type</i>>(n_rows, n_cols)
|
Chris@49
|
5493 </li>
|
Chris@49
|
5494 </ul>
|
Chris@49
|
5495 </li>
|
Chris@49
|
5496 <br>
|
Chris@49
|
5497 <li>
|
Chris@49
|
5498 Examples:
|
Chris@49
|
5499 <ul>
|
Chris@49
|
5500 <pre>
|
Chris@49
|
5501 mat A = eye<mat>(5,5);
|
Chris@49
|
5502 mat B = 123.0 * eye<mat>(5,5);
|
Chris@49
|
5503 </pre>
|
Chris@49
|
5504 </ul>
|
Chris@49
|
5505 </li>
|
Chris@49
|
5506 <br>
|
Chris@49
|
5507 <li>See also:
|
Chris@49
|
5508 <ul>
|
Chris@49
|
5509 <li><a href="#eye_member">.eye()</a> (member function of Mat)</li>
|
Chris@49
|
5510 <li><a href="#diag">.diag()</a></li>
|
Chris@49
|
5511 <li><a href="#ones_standalone">ones()</a></li>
|
Chris@49
|
5512 <li><a href="#diagmat">diagmat()</a></li>
|
Chris@49
|
5513 <li><a href="#diagvec">diagvec()</a></li>
|
Chris@49
|
5514 </ul>
|
Chris@49
|
5515 </li>
|
Chris@49
|
5516 <br>
|
Chris@49
|
5517 </ul>
|
Chris@49
|
5518 <hr class="greyline"><br>
|
Chris@49
|
5519
|
Chris@49
|
5520 <a name="linspace"></a>
|
Chris@49
|
5521 <b>linspace(start, end, N=100)</b>
|
Chris@49
|
5522 <ul>
|
Chris@49
|
5523 <li>
|
Chris@49
|
5524 Generate a vector with <i>N</i> elements;
|
Chris@49
|
5525 the values of the elements linearly increase from <i>start</i> upto (and including) <i>end</i>
|
Chris@49
|
5526 <br>
|
Chris@49
|
5527 </li>
|
Chris@49
|
5528 <br>
|
Chris@49
|
5529 <li>
|
Chris@49
|
5530 Usage:
|
Chris@49
|
5531 <ul>
|
Chris@49
|
5532 <li><i>vector_type</i> v = linspace<<i>vector_type</i>>(start, end, N)</li>
|
Chris@49
|
5533 <li><i>matrix_type</i> X = linspace<<i>matrix_type</i>>(start, end, N)</li>
|
Chris@49
|
5534 </ul>
|
Chris@49
|
5535 </li>
|
Chris@49
|
5536 <br>
|
Chris@49
|
5537 <li>
|
Chris@49
|
5538 If a <i>matrix_type</i> is specified, the resultant matrix will have one column
|
Chris@49
|
5539 </li>
|
Chris@49
|
5540 <br>
|
Chris@49
|
5541 <li>
|
Chris@49
|
5542 Examples:
|
Chris@49
|
5543 <ul>
|
Chris@49
|
5544 <pre>
|
Chris@49
|
5545 vec v = linspace<vec>(10, 20, 5);
|
Chris@49
|
5546 mat X = linspace<mat>(10, 20, 5);
|
Chris@49
|
5547 </pre>
|
Chris@49
|
5548 </ul>
|
Chris@49
|
5549 </li>
|
Chris@49
|
5550 <br>
|
Chris@49
|
5551 <li>
|
Chris@49
|
5552 See also:
|
Chris@49
|
5553 <ul>
|
Chris@49
|
5554 <li><a href="#ones_standalone">ones()</a></li>
|
Chris@49
|
5555 </ul>
|
Chris@49
|
5556 </li>
|
Chris@49
|
5557 </ul>
|
Chris@49
|
5558 <br>
|
Chris@49
|
5559 <hr class="greyline"><br>
|
Chris@49
|
5560
|
Chris@49
|
5561
|
Chris@49
|
5562
|
Chris@49
|
5563 <a name="ones_standalone"></a>
|
Chris@49
|
5564 <b>
|
Chris@49
|
5565 ones(n_elem)
|
Chris@49
|
5566 <br>ones(n_rows, n_cols)
|
Chris@49
|
5567 <br>ones(n_rows, n_cols, n_slices)
|
Chris@49
|
5568 </b>
|
Chris@49
|
5569 <ul>
|
Chris@49
|
5570 <li>
|
Chris@49
|
5571 Generate a vector, matrix or cube with all elements set to one
|
Chris@49
|
5572 </li>
|
Chris@49
|
5573 <br>
|
Chris@49
|
5574 <li>
|
Chris@49
|
5575 Usage:
|
Chris@49
|
5576 <ul>
|
Chris@49
|
5577 <li><i>vector_type</i> v = ones<<i>vector_type</i>>(n_elem)</li>
|
Chris@49
|
5578 <li><i>matrix_type</i> X = ones<<i>matrix_type</i>>(n_rows, n_cols)</li>
|
Chris@49
|
5579 <li><i>cube_type</i> Q = ones<<i>cube_type</i>>(n_rows, n_cols, n_slices)</li>
|
Chris@49
|
5580 </ul>
|
Chris@49
|
5581 </li>
|
Chris@49
|
5582 <br>
|
Chris@49
|
5583 <li>
|
Chris@49
|
5584 Examples:
|
Chris@49
|
5585 <ul>
|
Chris@49
|
5586 <pre>
|
Chris@49
|
5587 vec v = ones<vec>(10);
|
Chris@49
|
5588 uvec u = ones<uvec>(11);
|
Chris@49
|
5589 mat A = ones<mat>(5,6);
|
Chris@49
|
5590 cube Q = ones<cube>(5,6,7);
|
Chris@49
|
5591
|
Chris@49
|
5592 mat B = 123.0 * ones<mat>(5,6);
|
Chris@49
|
5593 </pre>
|
Chris@49
|
5594 </ul>
|
Chris@49
|
5595 </li>
|
Chris@49
|
5596 <br>
|
Chris@49
|
5597 <li>
|
Chris@49
|
5598 See also:
|
Chris@49
|
5599 <ul>
|
Chris@49
|
5600 <li><a href="#ones_member">.ones()</a> (member function of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i>)</li>
|
Chris@49
|
5601 <li><a href="#eye_standalone">eye()</a></li>
|
Chris@49
|
5602 <li><a href="#linspace">linspace()</a></li>
|
Chris@49
|
5603 <li><a href="#zeros_standalone">zeros()</a></li>
|
Chris@49
|
5604 </ul>
|
Chris@49
|
5605 </li>
|
Chris@49
|
5606 </ul>
|
Chris@49
|
5607 <br>
|
Chris@49
|
5608 <hr class="greyline"><br>
|
Chris@49
|
5609
|
Chris@49
|
5610 <a name="randu_randn_standalone"></a>
|
Chris@49
|
5611 <b>randu(n_elem)</b>
|
Chris@49
|
5612 <br><b>randu(n_rows, n_cols)</b>
|
Chris@49
|
5613 <br><b>randu(n_rows, n_cols, n_slices)</b>
|
Chris@49
|
5614 <br>
|
Chris@49
|
5615 <br><b>randn(n_elem)</b>
|
Chris@49
|
5616 <br><b>randn(n_rows, n_cols)</b>
|
Chris@49
|
5617 <br><b>randn(n_rows, n_cols, n_slices)</b>
|
Chris@49
|
5618 <ul>
|
Chris@49
|
5619 <li>
|
Chris@49
|
5620 Generate a vector, matrix or cube with the elements set to random values
|
Chris@49
|
5621 </li>
|
Chris@49
|
5622 <br>
|
Chris@49
|
5623 <li><i>randu()</i> uses a uniform distribution in the [0,1] interval
|
Chris@49
|
5624 </li>
|
Chris@49
|
5625 <br>
|
Chris@49
|
5626 <li><i>randn()</i> uses a normal/Gaussian distribution with zero mean and unit variance
|
Chris@49
|
5627 </li>
|
Chris@49
|
5628 <br>
|
Chris@49
|
5629 <li>
|
Chris@49
|
5630 Usage:
|
Chris@49
|
5631 <ul>
|
Chris@49
|
5632 <li><i>vector_type</i> v = randu<<i>vector_type</i>>(n_elem)</li>
|
Chris@49
|
5633 <li><i>matrix_type</i> X = randu<<i>matrix_type</i>>(n_rows, n_cols)</li>
|
Chris@49
|
5634 <li><i>cube_type</i> Q = randu<<i>cube_type</i>>(n_rows, n_cols, n_slices)</li>
|
Chris@49
|
5635 </ul>
|
Chris@49
|
5636 </li>
|
Chris@49
|
5637 <br>
|
Chris@49
|
5638 <li>
|
Chris@49
|
5639 To change the seed, use the <a href="http://cplusplus.com/reference/clibrary/cstdlib/srand/">std::srand()</a> function.
|
Chris@49
|
5640 </li>
|
Chris@49
|
5641 <br>
|
Chris@49
|
5642 <li>
|
Chris@49
|
5643 Examples:
|
Chris@49
|
5644 <ul>
|
Chris@49
|
5645 <pre>
|
Chris@49
|
5646 vec v = randu<vec>(5);
|
Chris@49
|
5647 mat A = randu<mat>(5,6);
|
Chris@49
|
5648 cube Q = randu<cube>(5,6,7);
|
Chris@49
|
5649 </pre>
|
Chris@49
|
5650 </ul>
|
Chris@49
|
5651 </li>
|
Chris@49
|
5652 <li>See also:
|
Chris@49
|
5653 <ul>
|
Chris@49
|
5654 <li><a href="#randu_randn_member">.randu() & .randn()</a> (member functions)</li>
|
Chris@49
|
5655 <li><a href="#imbue">.imbue()</a></li>
|
Chris@49
|
5656 <li><a href="#ones_standalone">ones()</a></li>
|
Chris@49
|
5657 <li><a href="#zeros_standalone">zeros()</a></li>
|
Chris@49
|
5658 <li><a href="#shuffle">shuffle()</a></li>
|
Chris@49
|
5659 <li><a href="http://cplusplus.com/reference/clibrary/cstdlib/srand/">std::srand()</a></li>
|
Chris@49
|
5660 </ul>
|
Chris@49
|
5661 </li>
|
Chris@49
|
5662 <br>
|
Chris@49
|
5663 </ul>
|
Chris@49
|
5664 <hr class="greyline"><br>
|
Chris@49
|
5665
|
Chris@49
|
5666 <a name="repmat"></a>
|
Chris@49
|
5667 <b>repmat(A, num_copies_per_row, num_copies_per_col)</b>
|
Chris@49
|
5668 <ul>
|
Chris@49
|
5669 <li>Generate a matrix by replicating matrix A in a block-like fashion</li>
|
Chris@49
|
5670 <br>
|
Chris@49
|
5671 <li>The generated matrix has the following size:
|
Chris@49
|
5672 <ul>
|
Chris@49
|
5673 rows = num_copies_per_row * A.n_rows
|
Chris@49
|
5674 <br>
|
Chris@49
|
5675 cols = num_copies_per_col * A.n_cols
|
Chris@49
|
5676 </ul>
|
Chris@49
|
5677 </li>
|
Chris@49
|
5678 <br>
|
Chris@49
|
5679 <li>
|
Chris@49
|
5680 Examples:
|
Chris@49
|
5681 <ul>
|
Chris@49
|
5682 <pre>
|
Chris@49
|
5683 mat A = randu<mat>(2, 3);
|
Chris@49
|
5684
|
Chris@49
|
5685 mat B = repmat(A, 4, 5);
|
Chris@49
|
5686 </pre>
|
Chris@49
|
5687 </ul>
|
Chris@49
|
5688 </li>
|
Chris@49
|
5689 <br>
|
Chris@49
|
5690 </ul>
|
Chris@49
|
5691 <hr class="greyline">
|
Chris@49
|
5692 <br>
|
Chris@49
|
5693
|
Chris@49
|
5694 <a name="speye"></a>
|
Chris@49
|
5695 <b>speye(n_rows, n_cols)</b>
|
Chris@49
|
5696 <ul>
|
Chris@49
|
5697 <li>
|
Chris@49
|
5698 Generate a sparse matrix with the elements along the main diagonal set to one
|
Chris@49
|
5699 and off-diagonal elements set to zero
|
Chris@49
|
5700 </li>
|
Chris@49
|
5701 <br>
|
Chris@49
|
5702 <li>
|
Chris@49
|
5703 An identity matrix is generated when <i>n_rows</i> = <i>n_cols</i>
|
Chris@49
|
5704 </li>
|
Chris@49
|
5705 <br>
|
Chris@49
|
5706 <li>
|
Chris@49
|
5707 Usage:
|
Chris@49
|
5708 <ul>
|
Chris@49
|
5709 <li>
|
Chris@49
|
5710 <i>sparse_matrix_type</i> X = speye<<i>sparse_matrix_type</i>>(n_rows, n_cols)
|
Chris@49
|
5711 </li>
|
Chris@49
|
5712 </ul>
|
Chris@49
|
5713 </li>
|
Chris@49
|
5714 <br>
|
Chris@49
|
5715 <li>
|
Chris@49
|
5716 Examples:
|
Chris@49
|
5717 <ul>
|
Chris@49
|
5718 <pre>
|
Chris@49
|
5719 sp_mat A = speye<sp_mat>(5,5);
|
Chris@49
|
5720 </pre>
|
Chris@49
|
5721 </ul>
|
Chris@49
|
5722 </li>
|
Chris@49
|
5723 <br>
|
Chris@49
|
5724 <li>See also:
|
Chris@49
|
5725 <ul>
|
Chris@49
|
5726 <li><a href="#sprandu_sprandn">sprandu()/sprandn()</a></li>
|
Chris@49
|
5727 </ul>
|
Chris@49
|
5728 </li>
|
Chris@49
|
5729 <br>
|
Chris@49
|
5730 </ul>
|
Chris@49
|
5731 <hr class="greyline"><br>
|
Chris@49
|
5732
|
Chris@49
|
5733 <a name="sprandu_sprandn"></a>
|
Chris@49
|
5734 <b>sprandu(n_rows, n_cols, density)</b>
|
Chris@49
|
5735 <br><b>sprandn(n_rows, n_cols, density)</b>
|
Chris@49
|
5736 <ul>
|
Chris@49
|
5737 <li>
|
Chris@49
|
5738 Generate a sparse matrix with the non-zero elements set to random values
|
Chris@49
|
5739 </li>
|
Chris@49
|
5740 <br>
|
Chris@49
|
5741 <li>
|
Chris@49
|
5742 The <i>density</i> argument specifies the percentage of non-zero elements; it must be in the [0,1] interval
|
Chris@49
|
5743 </li>
|
Chris@49
|
5744 <br>
|
Chris@49
|
5745 <li><i>sprandu()</i> uses a uniform distribution in the [0,1] interval
|
Chris@49
|
5746 </li>
|
Chris@49
|
5747 <br>
|
Chris@49
|
5748 <li><i>sprandn()</i> uses a normal/Gaussian distribution with zero mean and unit variance
|
Chris@49
|
5749 </li>
|
Chris@49
|
5750 <br>
|
Chris@49
|
5751 <li>
|
Chris@49
|
5752 Usage:
|
Chris@49
|
5753 <ul>
|
Chris@49
|
5754 <li><i>sparse_matrix_type</i> X = sprandu<<i>sparse_matrix_type</i>>(n_rows, n_cols, density)</li>
|
Chris@49
|
5755 </ul>
|
Chris@49
|
5756 </li>
|
Chris@49
|
5757 <br>
|
Chris@49
|
5758 <li>
|
Chris@49
|
5759 To change the seed, use the <a href="http://cplusplus.com/reference/clibrary/cstdlib/srand/">std::srand()</a> function.
|
Chris@49
|
5760 </li>
|
Chris@49
|
5761 <br>
|
Chris@49
|
5762 <li>
|
Chris@49
|
5763 Examples:
|
Chris@49
|
5764 <ul>
|
Chris@49
|
5765 <pre>
|
Chris@49
|
5766 sp_mat A = sprandu<sp_mat>(100, 200, 0.1);
|
Chris@49
|
5767 </pre>
|
Chris@49
|
5768 </ul>
|
Chris@49
|
5769 </li>
|
Chris@49
|
5770 <li>See also:
|
Chris@49
|
5771 <ul>
|
Chris@49
|
5772 <li><a href="#speye">speye()</a></li>
|
Chris@49
|
5773 <li><a href="http://cplusplus.com/reference/clibrary/cstdlib/srand/">std::srand()</a></li>
|
Chris@49
|
5774 </ul>
|
Chris@49
|
5775 </li>
|
Chris@49
|
5776 <br>
|
Chris@49
|
5777 </ul>
|
Chris@49
|
5778 <hr class="greyline"><br>
|
Chris@49
|
5779
|
Chris@49
|
5780 <a name="toeplitz"></a>
|
Chris@49
|
5781 <b>toeplitz(A)</b>
|
Chris@49
|
5782 <br><b>toeplitz(A,B)</b>
|
Chris@49
|
5783 <br><b>circ_toeplitz(A)</b>
|
Chris@49
|
5784 <ul>
|
Chris@49
|
5785 <li>
|
Chris@49
|
5786 toeplitz(): generate a Toeplitz matrix, with the first column specified by <i>A</i>, and (optionally) the first row specified by <i>B</i>
|
Chris@49
|
5787 </li>
|
Chris@49
|
5788 <br>
|
Chris@49
|
5789 <li>
|
Chris@49
|
5790 circ_toeplitz(): generate a circulant Toeplitz matrix
|
Chris@49
|
5791 </li>
|
Chris@49
|
5792 <br>
|
Chris@49
|
5793 <li>
|
Chris@49
|
5794 A and B must be vectors
|
Chris@49
|
5795 </li>
|
Chris@49
|
5796 <br>
|
Chris@49
|
5797 <li>
|
Chris@49
|
5798 Examples:
|
Chris@49
|
5799 <ul>
|
Chris@49
|
5800 <pre>
|
Chris@49
|
5801 vec A = randu<vec>(5);
|
Chris@49
|
5802 mat X = toeplitz(A);
|
Chris@49
|
5803 mat Y = circ_toeplitz(A);
|
Chris@49
|
5804 </pre>
|
Chris@49
|
5805 </ul>
|
Chris@49
|
5806 </li>
|
Chris@49
|
5807 <br>
|
Chris@49
|
5808 <li>See also:
|
Chris@49
|
5809 <ul>
|
Chris@49
|
5810 <li><a href="http://mathworld.wolfram.com/ToeplitzMatrix.html">Toeplitz matrix in MathWorld</a></li>
|
Chris@49
|
5811 <li><a href="http://en.wikipedia.org/wiki/Toeplitz_matrix">Toeplitz matrix in Wikipedia</a></li>
|
Chris@49
|
5812 <li><a href="http://en.wikipedia.org/wiki/Circulant_matrix">Circulant matrix in Wikipedia</a></li>
|
Chris@49
|
5813 </ul>
|
Chris@49
|
5814 </li>
|
Chris@49
|
5815 <br>
|
Chris@49
|
5816 </ul>
|
Chris@49
|
5817 <hr class="greyline">
|
Chris@49
|
5818 <br>
|
Chris@49
|
5819
|
Chris@49
|
5820 <a name="zeros_standalone"></a>
|
Chris@49
|
5821 <b>zeros(n_elem)</b>
|
Chris@49
|
5822 <br><b>zeros(n_rows, n_cols)</b>
|
Chris@49
|
5823 <br><b>zeros(n_rows, n_cols, n_slices)</b>
|
Chris@49
|
5824 <ul>
|
Chris@49
|
5825 <li>
|
Chris@49
|
5826 Generate a vector, matrix or cube with the elements set to zero
|
Chris@49
|
5827 </li>
|
Chris@49
|
5828 <br>
|
Chris@49
|
5829 <li>
|
Chris@49
|
5830 Usage:
|
Chris@49
|
5831 <ul>
|
Chris@49
|
5832 <li><i>vector_type</i> v = zeros<<i>vector_type</i>>(n_elem)</li>
|
Chris@49
|
5833 <li><i>matrix_type</i> X = zeros<<i>matrix_type</i>>(n_rows, n_cols)</li>
|
Chris@49
|
5834 <li><i>cube_type</i> X = zeros<<i>cube_type</i>>(n_rows, n_cols, n_slices)</li>
|
Chris@49
|
5835 </ul>
|
Chris@49
|
5836 </li>
|
Chris@49
|
5837 <br>
|
Chris@49
|
5838 <li>
|
Chris@49
|
5839 Examples:
|
Chris@49
|
5840 <ul>
|
Chris@49
|
5841 <pre>
|
Chris@49
|
5842 vec v = zeros<vec>(10);
|
Chris@49
|
5843 uvec u = zeros<uvec>(11);
|
Chris@49
|
5844 mat A = zeros<mat>(5,6);
|
Chris@49
|
5845 cube Q = zeros<cube>(5,6,7);
|
Chris@49
|
5846 </pre>
|
Chris@49
|
5847 </ul>
|
Chris@49
|
5848 </li>
|
Chris@49
|
5849 <br>
|
Chris@49
|
5850 <li>
|
Chris@49
|
5851 See also:
|
Chris@49
|
5852 <ul>
|
Chris@49
|
5853 <li><a href="#zeros_member">.zeros()</a> (member function of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i>)</li>
|
Chris@49
|
5854 <li><a href="#ones_member">.ones()</a> (member function of <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i>)</li>
|
Chris@49
|
5855 <li><a href="#ones_standalone">ones()</a></li>
|
Chris@49
|
5856 </ul>
|
Chris@49
|
5857 </li>
|
Chris@49
|
5858 </ul>
|
Chris@49
|
5859 <br>
|
Chris@49
|
5860 <hr class="greyline">
|
Chris@49
|
5861
|
Chris@49
|
5862 <hr class="greyline">
|
Chris@49
|
5863 <br>
|
Chris@49
|
5864 <br>
|
Chris@49
|
5865 <font size=+1><b>Functions Individually Applied to Each Element of a Matrix/Cube</b></font>
|
Chris@49
|
5866 <br>
|
Chris@49
|
5867 <br>
|
Chris@49
|
5868 <hr class="greyline">
|
Chris@49
|
5869 <br>
|
Chris@49
|
5870
|
Chris@49
|
5871 <a name="abs"></a>
|
Chris@49
|
5872 <b>abs(mat)</b>
|
Chris@49
|
5873 <br><b>abs(cube)</b>
|
Chris@49
|
5874 <br><b>abs(cx_mat)</b>
|
Chris@49
|
5875 <br><b>abs(cx_cube)</b>
|
Chris@49
|
5876 <ul>
|
Chris@49
|
5877 <li>
|
Chris@49
|
5878 Obtain the magnitude of each element
|
Chris@49
|
5879 </li>
|
Chris@49
|
5880 <br>
|
Chris@49
|
5881 <li>
|
Chris@49
|
5882 Usage for non-complex matrices:
|
Chris@49
|
5883 <ul>
|
Chris@49
|
5884 <li><i>matrix_type</i> Y = abs(X)</li>
|
Chris@49
|
5885 <li>X and Y must have the same <i>matrix_type</i></li>
|
Chris@49
|
5886 </ul>
|
Chris@49
|
5887 </li>
|
Chris@49
|
5888 <br>
|
Chris@49
|
5889 <li>
|
Chris@49
|
5890 Usage for non-complex cubes:
|
Chris@49
|
5891 <ul>
|
Chris@49
|
5892 <li><i>cube_type</i> Y = abs(X)</li>
|
Chris@49
|
5893 <li>X and Y must have the same <i>cube_type</i></li>
|
Chris@49
|
5894 </ul>
|
Chris@49
|
5895 </li>
|
Chris@49
|
5896 <br>
|
Chris@49
|
5897 <li>
|
Chris@49
|
5898 Usage for complex matrices:
|
Chris@49
|
5899 <ul>
|
Chris@49
|
5900 <li><i>non_complex_matrix_type</i> Y = abs(X)</li>
|
Chris@49
|
5901 <li>X must be a have complex matrix type, eg., <i>cx_mat</i> or <i>cx_fmat</i></li>
|
Chris@49
|
5902 <li>The type of Y must be related to the type of X,
|
Chris@49
|
5903 eg., if X has the type <i>cx_mat</i>, then the type of Y must be <i>mat</i>
|
Chris@49
|
5904 </ul>
|
Chris@49
|
5905 </li>
|
Chris@49
|
5906 <br>
|
Chris@49
|
5907 <li>
|
Chris@49
|
5908 Usage for complex cubes:
|
Chris@49
|
5909 <ul>
|
Chris@49
|
5910 <li><i>non_complex_cube_type</i> Y = abs(X)</li>
|
Chris@49
|
5911 <li>X must be a have complex cube type, eg., <i>cx_cube</i> or <i>cx_fcube</i></li>
|
Chris@49
|
5912 <li>The type of Y must be related to the type of X,
|
Chris@49
|
5913 eg., if X has the type <i>cx_cube</i>, then the type of Y must be <i>cube</i>
|
Chris@49
|
5914 </ul>
|
Chris@49
|
5915 </li>
|
Chris@49
|
5916 <br>
|
Chris@49
|
5917 <li>
|
Chris@49
|
5918 Examples:
|
Chris@49
|
5919 <ul>
|
Chris@49
|
5920 <pre>
|
Chris@49
|
5921 mat A = randu<mat>(5,5);
|
Chris@49
|
5922 mat B = abs(A);
|
Chris@49
|
5923
|
Chris@49
|
5924 cx_mat X = randu<cx_mat>(5,5);
|
Chris@49
|
5925 mat Y = abs(X);
|
Chris@49
|
5926 </pre>
|
Chris@49
|
5927 </ul>
|
Chris@49
|
5928 </li>
|
Chris@49
|
5929 </ul>
|
Chris@49
|
5930 <br>
|
Chris@49
|
5931 <hr class="greyline"><br>
|
Chris@49
|
5932
|
Chris@49
|
5933 <a name="eps"></a>
|
Chris@49
|
5934 <b>eps(X)</b>
|
Chris@49
|
5935 <ul>
|
Chris@49
|
5936 <li>
|
Chris@49
|
5937 Obtain the positive distance of the absolute value of each element of <i>X</i> to the next largest representable floating point number
|
Chris@49
|
5938 </li>
|
Chris@49
|
5939 <br>
|
Chris@49
|
5940 <li>
|
Chris@49
|
5941 <i>X</i> can be a scalar (eg. <i>double</i>), vector or matrix
|
Chris@49
|
5942 </li>
|
Chris@49
|
5943 <br>
|
Chris@49
|
5944 <li>
|
Chris@49
|
5945 Examples:
|
Chris@49
|
5946 <ul>
|
Chris@49
|
5947 <pre>
|
Chris@49
|
5948 mat A = randu<mat>(4,5);
|
Chris@49
|
5949 mat B = eps(A);
|
Chris@49
|
5950 </pre>
|
Chris@49
|
5951 </ul>
|
Chris@49
|
5952 </li>
|
Chris@49
|
5953 <br>
|
Chris@49
|
5954 <li>
|
Chris@49
|
5955 See also:
|
Chris@49
|
5956 <ul>
|
Chris@49
|
5957 <li><a href="#constants">datum::eps</a></li>
|
Chris@49
|
5958 <li><a href="http://mathworld.wolfram.com/Floating-PointArithmetic.html">Floating-Point Arithmetic in MathWorld</a></li>
|
Chris@49
|
5959 <li><a href="http://en.wikipedia.org/wiki/IEEE_754-2008">IEEE Standard for Floating-Point Arithmetic in Wikipedia</a></li>
|
Chris@49
|
5960
|
Chris@49
|
5961 </ul>
|
Chris@49
|
5962 </li>
|
Chris@49
|
5963 </ul>
|
Chris@49
|
5964 <br>
|
Chris@49
|
5965 <hr class="greyline"><br>
|
Chris@49
|
5966
|
Chris@49
|
5967 <a name="misc_fns"></a>
|
Chris@49
|
5968 <b>
|
Chris@49
|
5969 miscellaneous functions:
|
Chris@49
|
5970 <br> exp, exp2, exp10, trunc_exp,
|
Chris@49
|
5971 <br> log, log2, log10, trunc_log,
|
Chris@49
|
5972 <br> pow, sqrt, square
|
Chris@49
|
5973 <br> floor, ceil, round
|
Chris@49
|
5974 </b>
|
Chris@49
|
5975 <br>
|
Chris@49
|
5976 <ul>
|
Chris@49
|
5977 <li>
|
Chris@49
|
5978 Apply a function to each element
|
Chris@49
|
5979 </li>
|
Chris@49
|
5980 <br>
|
Chris@49
|
5981 <li>
|
Chris@49
|
5982 Usage:
|
Chris@49
|
5983 <ul>
|
Chris@49
|
5984 <li>
|
Chris@49
|
5985 <i>matrix_type</i> B = misc_fn(A)
|
Chris@49
|
5986 </li>
|
Chris@49
|
5987 <li>
|
Chris@49
|
5988 <i>cube_type</i> B = misc_fn(A)
|
Chris@49
|
5989 </li>
|
Chris@49
|
5990 <li>
|
Chris@49
|
5991 A and B must have the same <i>matrix_type/cube_type</i>
|
Chris@49
|
5992 </li>
|
Chris@49
|
5993 <li>
|
Chris@49
|
5994 misc_fn(A) is one of:
|
Chris@49
|
5995 <ul>
|
Chris@49
|
5996
|
Chris@49
|
5997 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
5998 <tbody>
|
Chris@49
|
5999 <tr>
|
Chris@49
|
6000 <td style="vertical-align: top;">
|
Chris@49
|
6001 exp(A)<sup> </sup>
|
Chris@49
|
6002 </td>
|
Chris@49
|
6003 <td style="vertical-align: top;">
|
Chris@49
|
6004
|
Chris@49
|
6005 </td>
|
Chris@49
|
6006 <td style="vertical-align: top;">
|
Chris@49
|
6007 base-e exponential, <i>e<sup>x</sup></i>
|
Chris@49
|
6008 </td>
|
Chris@49
|
6009 </tr>
|
Chris@49
|
6010 <tr>
|
Chris@49
|
6011 <td style="vertical-align: top;">
|
Chris@49
|
6012 exp2(A)<sup> </sup>
|
Chris@49
|
6013 </td>
|
Chris@49
|
6014 <td style="vertical-align: top;">
|
Chris@49
|
6015
|
Chris@49
|
6016 </td>
|
Chris@49
|
6017 <td style="vertical-align: top;">
|
Chris@49
|
6018 base-2 exponential, <i>2<sup>x</sup></i>
|
Chris@49
|
6019 </td>
|
Chris@49
|
6020 </tr>
|
Chris@49
|
6021 <tr>
|
Chris@49
|
6022 <td style="vertical-align: top;">
|
Chris@49
|
6023 exp10(A)<sup> </sup>
|
Chris@49
|
6024 </td>
|
Chris@49
|
6025 <td style="vertical-align: top;">
|
Chris@49
|
6026
|
Chris@49
|
6027 </td>
|
Chris@49
|
6028 <td style="vertical-align: top;">
|
Chris@49
|
6029 base-10 exponential, <i>10<sup>x</sup></i>
|
Chris@49
|
6030 </td>
|
Chris@49
|
6031 </tr>
|
Chris@49
|
6032 <tr>
|
Chris@49
|
6033 <td style="vertical-align: top;">
|
Chris@49
|
6034 trunc_exp(A)
|
Chris@49
|
6035 </td>
|
Chris@49
|
6036 <td style="vertical-align: top;">
|
Chris@49
|
6037
|
Chris@49
|
6038 </td>
|
Chris@49
|
6039 <td style="vertical-align: top;">
|
Chris@49
|
6040 base-e exponential,
|
Chris@49
|
6041 truncated to avoid infinity
|
Chris@49
|
6042 <br>
|
Chris@49
|
6043 <font size=-1>(only for elements with type <i>float</i> or <i>double</i>)</font>
|
Chris@49
|
6044 </td>
|
Chris@49
|
6045 </tr>
|
Chris@49
|
6046 <tr>
|
Chris@49
|
6047 <td style="vertical-align: top;">
|
Chris@49
|
6048 log(A)<sub> </sub>
|
Chris@49
|
6049 </td>
|
Chris@49
|
6050 <td style="vertical-align: top;">
|
Chris@49
|
6051
|
Chris@49
|
6052 </td>
|
Chris@49
|
6053 <td style="vertical-align: top;">
|
Chris@49
|
6054 natural log, <i>log<sub>e</sub> x</i>
|
Chris@49
|
6055 </td>
|
Chris@49
|
6056 </tr>
|
Chris@49
|
6057 <tr>
|
Chris@49
|
6058 <td style="vertical-align: top;">
|
Chris@49
|
6059 log2(A)<sub> </sub>
|
Chris@49
|
6060 </td>
|
Chris@49
|
6061 <td style="vertical-align: top;">
|
Chris@49
|
6062
|
Chris@49
|
6063 </td>
|
Chris@49
|
6064 <td style="vertical-align: top;">
|
Chris@49
|
6065 base-2 log, <i>log<sub>2</sub> x</i>
|
Chris@49
|
6066 </td>
|
Chris@49
|
6067 </tr>
|
Chris@49
|
6068 <tr>
|
Chris@49
|
6069 <td style="vertical-align: top;">
|
Chris@49
|
6070 log10(A)<sub> </sub>
|
Chris@49
|
6071 </td>
|
Chris@49
|
6072 <td style="vertical-align: top;">
|
Chris@49
|
6073
|
Chris@49
|
6074 </td>
|
Chris@49
|
6075 <td style="vertical-align: top;">
|
Chris@49
|
6076 base-10 log, <i>log<sub>10</sub> x</i>
|
Chris@49
|
6077 </td>
|
Chris@49
|
6078 </tr>
|
Chris@49
|
6079 <tr>
|
Chris@49
|
6080 <td style="vertical-align: top;">
|
Chris@49
|
6081 trunc_log(A)
|
Chris@49
|
6082 </td>
|
Chris@49
|
6083 <td style="vertical-align: top;">
|
Chris@49
|
6084
|
Chris@49
|
6085 </td>
|
Chris@49
|
6086 <td style="vertical-align: top;">
|
Chris@49
|
6087 natural log,
|
Chris@49
|
6088 truncated to avoid ±infinity
|
Chris@49
|
6089 <br>
|
Chris@49
|
6090 <font size=-1>(only for elements with type <i>float</i> or <i>double</i>)</font>
|
Chris@49
|
6091 </td>
|
Chris@49
|
6092 </tr>
|
Chris@49
|
6093 <tr>
|
Chris@49
|
6094 <td style="vertical-align: top;">
|
Chris@49
|
6095 pow(A, p)<sup> </sup>
|
Chris@49
|
6096 </td>
|
Chris@49
|
6097 <td style="vertical-align: top;">
|
Chris@49
|
6098
|
Chris@49
|
6099 </td>
|
Chris@49
|
6100 <td style="vertical-align: top;">
|
Chris@49
|
6101 raise to the power of p, <i>x<sup>p</sup></i>
|
Chris@49
|
6102 </td>
|
Chris@49
|
6103 </tr>
|
Chris@49
|
6104 <tr>
|
Chris@49
|
6105 <td style="vertical-align: top;">
|
Chris@49
|
6106 sqrt(A)<sup> </sup>
|
Chris@49
|
6107 </td>
|
Chris@49
|
6108 <td style="vertical-align: top;">
|
Chris@49
|
6109
|
Chris@49
|
6110 </td>
|
Chris@49
|
6111 <td style="vertical-align: top;">
|
Chris@49
|
6112 square root, <i>x<sup>½</sup></i>
|
Chris@49
|
6113 </td>
|
Chris@49
|
6114 </tr>
|
Chris@49
|
6115 <tr>
|
Chris@49
|
6116 <td style="vertical-align: top;">
|
Chris@49
|
6117 square(A)<sup> </sup>
|
Chris@49
|
6118 </td>
|
Chris@49
|
6119 <td style="vertical-align: top;">
|
Chris@49
|
6120
|
Chris@49
|
6121 </td>
|
Chris@49
|
6122 <td style="vertical-align: top;">
|
Chris@49
|
6123 square, <i>x<sup>2</sup></i>
|
Chris@49
|
6124 </td>
|
Chris@49
|
6125 </tr>
|
Chris@49
|
6126 <tr>
|
Chris@49
|
6127 <td style="vertical-align: top;">
|
Chris@49
|
6128 floor(A)
|
Chris@49
|
6129 </td>
|
Chris@49
|
6130 <td style="vertical-align: top;">
|
Chris@49
|
6131
|
Chris@49
|
6132 </td>
|
Chris@49
|
6133 <td style="vertical-align: top;">
|
Chris@49
|
6134 largest integral value that is not greater than the input value
|
Chris@49
|
6135 </td>
|
Chris@49
|
6136 </tr>
|
Chris@49
|
6137 <tr>
|
Chris@49
|
6138 <td style="vertical-align: top;">
|
Chris@49
|
6139 ceil(A)
|
Chris@49
|
6140 </td>
|
Chris@49
|
6141 <td style="vertical-align: top;">
|
Chris@49
|
6142
|
Chris@49
|
6143 </td>
|
Chris@49
|
6144 <td style="vertical-align: top;">
|
Chris@49
|
6145 smallest integral value that is not less than the input value
|
Chris@49
|
6146 </td>
|
Chris@49
|
6147 </tr>
|
Chris@49
|
6148 <tr>
|
Chris@49
|
6149 <td style="vertical-align: top;">
|
Chris@49
|
6150 round(A)
|
Chris@49
|
6151 </td>
|
Chris@49
|
6152 <td style="vertical-align: top;">
|
Chris@49
|
6153
|
Chris@49
|
6154 </td>
|
Chris@49
|
6155 <td style="vertical-align: top;">
|
Chris@49
|
6156 round to nearest integer, away from zero
|
Chris@49
|
6157 </td>
|
Chris@49
|
6158 </tr>
|
Chris@49
|
6159 </tbody>
|
Chris@49
|
6160 </table>
|
Chris@49
|
6161
|
Chris@49
|
6162
|
Chris@49
|
6163 </ul>
|
Chris@49
|
6164 </li>
|
Chris@49
|
6165
|
Chris@49
|
6166 </ul>
|
Chris@49
|
6167 </li>
|
Chris@49
|
6168 <br>
|
Chris@49
|
6169 <li>
|
Chris@49
|
6170 Examples:
|
Chris@49
|
6171 <ul>
|
Chris@49
|
6172 <pre>
|
Chris@49
|
6173 mat A = randu<mat>(5,5);
|
Chris@49
|
6174 mat B = exp(A);
|
Chris@49
|
6175 </pre>
|
Chris@49
|
6176 </ul>
|
Chris@49
|
6177 </li>
|
Chris@49
|
6178 </ul>
|
Chris@49
|
6179 <br>
|
Chris@49
|
6180 <hr class="greyline"><br>
|
Chris@49
|
6181
|
Chris@49
|
6182 <a name="trig_fns"></a>
|
Chris@49
|
6183 <b>trigonometric functions (cos, sin, tan, ...)</b>
|
Chris@49
|
6184 <ul>
|
Chris@49
|
6185 <li>
|
Chris@49
|
6186 Apply a trigonometric function to each element
|
Chris@49
|
6187 </li>
|
Chris@49
|
6188 <br>
|
Chris@49
|
6189 <li>
|
Chris@49
|
6190 Usage:
|
Chris@49
|
6191 <ul>
|
Chris@49
|
6192 <li>
|
Chris@49
|
6193 <i>matrix_type</i> Y = trig_fn(X)
|
Chris@49
|
6194 </li>
|
Chris@49
|
6195 <li>
|
Chris@49
|
6196 <i>cube_type</i> Y = trig_fn(X)
|
Chris@49
|
6197 </li>
|
Chris@49
|
6198 <li>
|
Chris@49
|
6199 X and Y must have the same <i>matrix_type/cube_type</i>
|
Chris@49
|
6200 </li>
|
Chris@49
|
6201 <li>
|
Chris@49
|
6202 trig_fn is one of:
|
Chris@49
|
6203 <ul>
|
Chris@49
|
6204 <li>
|
Chris@49
|
6205 cos family: <i>cos</i>, <i>acos</i>, <i>cosh</i>, <i>acosh</i>
|
Chris@49
|
6206 </li>
|
Chris@49
|
6207 <li>
|
Chris@49
|
6208 sin family: <i>sin</i>, <i>asin</i>, <i>sinh</i>, <i>asinh</i>
|
Chris@49
|
6209 </li>
|
Chris@49
|
6210 <li>
|
Chris@49
|
6211 tan family: <i>tan</i>, <i>atan</i>, <i>tanh</i>, <i>atanh</i>
|
Chris@49
|
6212 </li>
|
Chris@49
|
6213 </ul>
|
Chris@49
|
6214 </li>
|
Chris@49
|
6215
|
Chris@49
|
6216 </ul>
|
Chris@49
|
6217 </li>
|
Chris@49
|
6218 <br>
|
Chris@49
|
6219 <li>
|
Chris@49
|
6220 Examples:
|
Chris@49
|
6221 <ul>
|
Chris@49
|
6222 <pre>
|
Chris@49
|
6223 mat X = randu<mat>(5,5);
|
Chris@49
|
6224 mat Y = cos(X);
|
Chris@49
|
6225 </pre>
|
Chris@49
|
6226 </ul>
|
Chris@49
|
6227 </li>
|
Chris@49
|
6228 </ul>
|
Chris@49
|
6229 <br>
|
Chris@49
|
6230 <hr class="greyline">
|
Chris@49
|
6231
|
Chris@49
|
6232 <hr class="greyline">
|
Chris@49
|
6233 <br>
|
Chris@49
|
6234 <br>
|
Chris@49
|
6235 <font size=+1><b>Scalar Valued Functions of Vectors/Matrices/Cubes</b></font>
|
Chris@49
|
6236 <br>
|
Chris@49
|
6237 <br>
|
Chris@49
|
6238 <hr class="greyline">
|
Chris@49
|
6239 <br>
|
Chris@49
|
6240
|
Chris@49
|
6241 <a name="accu"></a>
|
Chris@49
|
6242 <b>accu(mat)</b>
|
Chris@49
|
6243 <br><b>accu(cube)</b>
|
Chris@49
|
6244 <ul>
|
Chris@49
|
6245 <li>
|
Chris@49
|
6246 Accumulate (sum) all elements
|
Chris@49
|
6247 </li>
|
Chris@49
|
6248 <br>
|
Chris@49
|
6249 <li>
|
Chris@49
|
6250 Examples:
|
Chris@49
|
6251 <ul>
|
Chris@49
|
6252 <pre>
|
Chris@49
|
6253 mat A = randu<mat>(5,5);
|
Chris@49
|
6254 double x = accu(A);
|
Chris@49
|
6255
|
Chris@49
|
6256 mat B = randu<mat>(5,5);
|
Chris@49
|
6257 double y = accu(A % B);
|
Chris@49
|
6258
|
Chris@49
|
6259 // operator % performs element-wise multiplication,
|
Chris@49
|
6260 // hence accu(A % B) is a "multiply-and-accumulate"
|
Chris@49
|
6261 // operation
|
Chris@49
|
6262 </pre>
|
Chris@49
|
6263 </ul>
|
Chris@49
|
6264 </li>
|
Chris@49
|
6265 <br>
|
Chris@49
|
6266 <li>
|
Chris@49
|
6267 See also:
|
Chris@49
|
6268 <ul>
|
Chris@49
|
6269 <li><a href="#sum">sum()</a></li>
|
Chris@49
|
6270 <li><a href="#cumsum">cumsum()</a></li>
|
Chris@49
|
6271 <li><a href="#as_scalar">as_scalar()</a></li>
|
Chris@49
|
6272 <li><a href="#trace">trace()</a></li>
|
Chris@49
|
6273 </ul>
|
Chris@49
|
6274 </li>
|
Chris@49
|
6275 <br>
|
Chris@49
|
6276 </ul>
|
Chris@49
|
6277 <hr class="greyline"><br>
|
Chris@49
|
6278
|
Chris@49
|
6279 <a name="as_scalar"></a>
|
Chris@49
|
6280 <b>as_scalar(expression)</b>
|
Chris@49
|
6281 <ul>
|
Chris@49
|
6282 <li>
|
Chris@49
|
6283 Evaluate an expression that results in a 1x1 matrix,
|
Chris@49
|
6284 followed by converting the 1x1 matrix to a pure scalar
|
Chris@49
|
6285 </li>
|
Chris@49
|
6286 <br>
|
Chris@49
|
6287 <li>
|
Chris@49
|
6288 If a binary or trinary expression is given (ie. 2 or 3 terms),
|
Chris@49
|
6289 the function will try to exploit the fact that the result is a 1x1 matrix
|
Chris@49
|
6290 by using optimised expression evaluations
|
Chris@49
|
6291 </li>
|
Chris@49
|
6292 <br>
|
Chris@49
|
6293 <li>
|
Chris@49
|
6294 Examples:
|
Chris@49
|
6295 <ul>
|
Chris@49
|
6296 <pre>
|
Chris@49
|
6297 rowvec r = randu<rowvec>(5);
|
Chris@49
|
6298 colvec q = randu<colvec>(5);
|
Chris@49
|
6299 mat X = randu<mat>(5,5);
|
Chris@49
|
6300
|
Chris@49
|
6301 // examples of some expressions
|
Chris@49
|
6302 // for which optimised implementations exist
|
Chris@49
|
6303
|
Chris@49
|
6304 double a = as_scalar(r*q);
|
Chris@49
|
6305 double b = as_scalar(r*X*q);
|
Chris@49
|
6306 double c = as_scalar(r*diagmat(X)*q);
|
Chris@49
|
6307 double d = as_scalar(r*inv(diagmat(X))*q);
|
Chris@49
|
6308 </pre>
|
Chris@49
|
6309 </ul>
|
Chris@49
|
6310 </li>
|
Chris@49
|
6311 <br>
|
Chris@49
|
6312 <li>
|
Chris@49
|
6313 See also:
|
Chris@49
|
6314 <ul>
|
Chris@49
|
6315 <li><a href="#accu">accu()</a></li>
|
Chris@49
|
6316 <li><a href="#conv_to">conv_to()</a></li>
|
Chris@49
|
6317 <li><a href="#dot">dot()</a></li>
|
Chris@49
|
6318 <li><a href="#norm">norm()</a></li>
|
Chris@49
|
6319 <li><a href="#reshape">reshape()</a></li>
|
Chris@49
|
6320 <li><a href="#resize">resize()</a></li>
|
Chris@49
|
6321 <li><a href="#trace">trace()</a></li>
|
Chris@49
|
6322 </ul>
|
Chris@49
|
6323 </li>
|
Chris@49
|
6324 <br>
|
Chris@49
|
6325 </ul>
|
Chris@49
|
6326 <hr class="greyline"><br>
|
Chris@49
|
6327
|
Chris@49
|
6328 <a name="det"></a>
|
Chris@49
|
6329 <b>det(A, </b><i>slow=false</i><b>)</b>
|
Chris@49
|
6330 <ul>
|
Chris@49
|
6331 <li>
|
Chris@49
|
6332 Determinant of square matrix <i>A</i>
|
Chris@49
|
6333 </li>
|
Chris@49
|
6334 <br>
|
Chris@49
|
6335 <li>
|
Chris@49
|
6336 If <i>A</i> is not square, a <i>std::logic_error</i> exception is thrown
|
Chris@49
|
6337 </li>
|
Chris@49
|
6338 <br>
|
Chris@49
|
6339 <li>
|
Chris@49
|
6340 <b>Caveat</b>: for large matrices you may want to use <a href="#log_det">log_det()</a> instead
|
Chris@49
|
6341 </li>
|
Chris@49
|
6342 <br>
|
Chris@49
|
6343 <li>
|
Chris@49
|
6344 For matrix sizes ≤ 4x4, a fast algorithm is used by default.
|
Chris@49
|
6345 In rare instances, the fast algorithm might be less precise than the standard algorithm.
|
Chris@49
|
6346 To force the use of the standard algorithm, set the <i>slow</i> argument to <i>true</i>
|
Chris@49
|
6347 </li>
|
Chris@49
|
6348 <br>
|
Chris@49
|
6349 <li>
|
Chris@49
|
6350 Examples:
|
Chris@49
|
6351 <ul>
|
Chris@49
|
6352 <pre>
|
Chris@49
|
6353 mat A = randu<mat>(5,5);
|
Chris@49
|
6354 double x = det(A);
|
Chris@49
|
6355
|
Chris@49
|
6356 mat44 B = randu<mat>(4,4);
|
Chris@49
|
6357
|
Chris@49
|
6358 double y = det(B); // use fast algorithm by default
|
Chris@49
|
6359 double z = det(B, true); // use slow algorithm
|
Chris@49
|
6360 </pre>
|
Chris@49
|
6361 </ul>
|
Chris@49
|
6362 </li>
|
Chris@49
|
6363 <br>
|
Chris@49
|
6364 <li>
|
Chris@49
|
6365 See also:
|
Chris@49
|
6366 <ul>
|
Chris@49
|
6367 <li><a href="#log_det">log_det()</a></li>
|
Chris@49
|
6368 <li><a href="http://mathworld.wolfram.com/Determinant.html">determinant in MathWorld</a></li>
|
Chris@49
|
6369 <li><a href="http://en.wikipedia.org/wiki/Determinant">determinant in Wikipedia</a></li>
|
Chris@49
|
6370 </ul>
|
Chris@49
|
6371 </li>
|
Chris@49
|
6372 <br>
|
Chris@49
|
6373 </ul>
|
Chris@49
|
6374 <hr class="greyline"><br>
|
Chris@49
|
6375
|
Chris@49
|
6376 <a name="dot"></a>
|
Chris@49
|
6377 <b>dot(A, B)</b>
|
Chris@49
|
6378 <br><b>cdot(A, B)</b>
|
Chris@49
|
6379 <br><b>norm_dot(A, B)</b>
|
Chris@49
|
6380 <ul>
|
Chris@49
|
6381 <li>
|
Chris@49
|
6382 <i>dot(A,B)</i>: dot product of <i>A</i> and <i>B</i>, under the assumption that <i>A</i> and <i>B</i> are vectors with the same number of elements
|
Chris@49
|
6383 </li>
|
Chris@49
|
6384 <br>
|
Chris@49
|
6385 <li>
|
Chris@49
|
6386 <i>cdot(A,B)</i>: as per <i>dot(A,B)</i>, but the complex conjugate of <i>A</i> is used
|
Chris@49
|
6387 </li>
|
Chris@49
|
6388 <br>
|
Chris@49
|
6389 <li>
|
Chris@49
|
6390 <i>norm_dot(A,B)</i>: normalised version of <i>dot(A,B)</i>
|
Chris@49
|
6391 </li>
|
Chris@49
|
6392 <br>
|
Chris@49
|
6393 <li>
|
Chris@49
|
6394 Examples:
|
Chris@49
|
6395 <ul>
|
Chris@49
|
6396 <pre>
|
Chris@49
|
6397 vec a = randu<vec>(10);
|
Chris@49
|
6398 vec b = randu<vec>(10);
|
Chris@49
|
6399
|
Chris@49
|
6400 double x = dot(a,b);
|
Chris@49
|
6401 </pre>
|
Chris@49
|
6402 </ul>
|
Chris@49
|
6403 </li>
|
Chris@49
|
6404 <br>
|
Chris@49
|
6405 <li>See also:
|
Chris@49
|
6406 <ul>
|
Chris@49
|
6407 <li><a href="#as_scalar">as_scalar()</a></li>
|
Chris@49
|
6408 <li><a href="#cross">cross()</a></li>
|
Chris@49
|
6409 <li><a href="#conj">conj()</a></li>
|
Chris@49
|
6410 <li><a href="#norm">norm()</a></li>
|
Chris@49
|
6411 </ul>
|
Chris@49
|
6412 </li>
|
Chris@49
|
6413 <br>
|
Chris@49
|
6414 </ul>
|
Chris@49
|
6415 <hr class="greyline"><br>
|
Chris@49
|
6416
|
Chris@49
|
6417 <a name="log_det"></a>
|
Chris@49
|
6418 <b>log_det(val, sign, A)</b>
|
Chris@49
|
6419 <ul>
|
Chris@49
|
6420 <li>
|
Chris@49
|
6421 Log determinant of square matrix <i>A</i>, such that the determinant is equal to <i>exp(val)*sign</i>
|
Chris@49
|
6422 </li>
|
Chris@49
|
6423 <br>
|
Chris@49
|
6424 <li>
|
Chris@49
|
6425 If <i>A</i> is not square, a <i>std::logic_error</i> exception is thrown
|
Chris@49
|
6426 </li>
|
Chris@49
|
6427 <br>
|
Chris@49
|
6428 <li>
|
Chris@49
|
6429 Examples:
|
Chris@49
|
6430 <ul>
|
Chris@49
|
6431 <pre>
|
Chris@49
|
6432 mat A = randu<mat>(5,5);
|
Chris@49
|
6433
|
Chris@49
|
6434 double val;
|
Chris@49
|
6435 double sign;
|
Chris@49
|
6436
|
Chris@49
|
6437 log_det(val, sign, A);
|
Chris@49
|
6438 </pre>
|
Chris@49
|
6439 </ul>
|
Chris@49
|
6440 </li>
|
Chris@49
|
6441 <br>
|
Chris@49
|
6442 <li>
|
Chris@49
|
6443 See also:
|
Chris@49
|
6444 <ul>
|
Chris@49
|
6445 <li><a href="#det">det()</a></li>
|
Chris@49
|
6446 <li><a href="http://mathworld.wolfram.com/Determinant.html">determinant in MathWorld</a></li>
|
Chris@49
|
6447 <li><a href="http://en.wikipedia.org/wiki/Determinant">determinant in Wikipedia</a></li>
|
Chris@49
|
6448 </ul>
|
Chris@49
|
6449 </li>
|
Chris@49
|
6450 <br>
|
Chris@49
|
6451 </ul>
|
Chris@49
|
6452 <hr class="greyline"><br>
|
Chris@49
|
6453
|
Chris@49
|
6454 <a name="norm"></a>
|
Chris@49
|
6455 <b>
|
Chris@49
|
6456 norm(X, p)
|
Chris@49
|
6457 </b>
|
Chris@49
|
6458 <ul>
|
Chris@49
|
6459 <li>
|
Chris@49
|
6460 Compute the <i>p</i>-norm of <i>X</i>, where <i>X</i> can be a vector or a matrix
|
Chris@49
|
6461 </li>
|
Chris@49
|
6462 <br>
|
Chris@49
|
6463 <li>
|
Chris@49
|
6464 For vectors, <i>p</i> is an integer ≥1, or one of: "-inf", "inf", "fro"
|
Chris@49
|
6465 </li>
|
Chris@49
|
6466 <br>
|
Chris@49
|
6467 <li>
|
Chris@49
|
6468 For matrices, <i>p</i> is one of: 1, 2, "inf", "fro"; the calculated norm is the <i>induced norm</i> (not entrywise norm)
|
Chris@49
|
6469 </li>
|
Chris@49
|
6470 <br>
|
Chris@49
|
6471 <li>
|
Chris@49
|
6472 "-inf" is the minimum norm, "inf" is the maximum norm, while "fro" is the Frobenius norm
|
Chris@49
|
6473 </li>
|
Chris@49
|
6474 <br>
|
Chris@49
|
6475 <li>
|
Chris@49
|
6476 To obtain the zero norm or Hamming norm (ie. the number of non-zero elements),
|
Chris@49
|
6477 you may want to use this expression: <a href="#accu">accu</a>(X != 0).
|
Chris@49
|
6478 </li>
|
Chris@49
|
6479 <br>
|
Chris@49
|
6480 <li>
|
Chris@49
|
6481 Examples:
|
Chris@49
|
6482 <ul>
|
Chris@49
|
6483 <pre>
|
Chris@49
|
6484 vec q = randu<vec>(5);
|
Chris@49
|
6485 double x = norm(q, 2);
|
Chris@49
|
6486 double y = norm(q, "inf");
|
Chris@49
|
6487 </pre>
|
Chris@49
|
6488 </ul>
|
Chris@49
|
6489 </li>
|
Chris@49
|
6490 <br>
|
Chris@49
|
6491 <li>
|
Chris@49
|
6492 See also:
|
Chris@49
|
6493 <ul>
|
Chris@49
|
6494 <li><a href="#dot">dot()</a></li>
|
Chris@49
|
6495 <li><a href="http://en.wikipedia.org/wiki/Norm_(mathematics)">Vector Norm in Wikipedia</a></li>
|
Chris@49
|
6496 <li><a href="http://mathworld.wolfram.com/VectorNorm.html">Vector Norm in MathWorld</a></li>
|
Chris@49
|
6497 <li><a href="http://en.wikipedia.org/wiki/Matrix_norm">Matrix Norm in Wikipedia</a></li>
|
Chris@49
|
6498 <li><a href="http://mathworld.wolfram.com/MatrixNorm.html">Matrix Norm in MathWorld</a></li>
|
Chris@49
|
6499 </ul>
|
Chris@49
|
6500 </li>
|
Chris@49
|
6501 <br>
|
Chris@49
|
6502 </ul>
|
Chris@49
|
6503 <hr class="greyline"><br>
|
Chris@49
|
6504
|
Chris@49
|
6505 <a name="rank"></a>
|
Chris@49
|
6506 <b>rank(X, tolerance = default)</b>
|
Chris@49
|
6507
|
Chris@49
|
6508 <ul>
|
Chris@49
|
6509 <li>Returns the rank of matrix <i>X</i></li><br>
|
Chris@49
|
6510 <li>Any singular values less than default tolerance are treated as zero</li><br>
|
Chris@49
|
6511 <li>The default tolerance is <i>max(X.n_rows, X.n_cols)*eps(sigma)</i>,
|
Chris@49
|
6512 where <i>sigma</i> is the largest singular value of <i>X</i>
|
Chris@49
|
6513 </li><br>
|
Chris@49
|
6514 <li>The computation is based on singular value decomposition;
|
Chris@49
|
6515 if the decomposition fails, a <i>std::runtime_error</i> exception is thrown</li><br>
|
Chris@49
|
6516 <li>
|
Chris@49
|
6517 Examples:
|
Chris@49
|
6518 <ul>
|
Chris@49
|
6519 <pre>
|
Chris@49
|
6520 mat A = randu<mat>(4,5);
|
Chris@49
|
6521 uword r = rank(A);
|
Chris@49
|
6522 </pre>
|
Chris@49
|
6523 </ul>
|
Chris@49
|
6524 </li>
|
Chris@49
|
6525 <br>
|
Chris@49
|
6526 <li>
|
Chris@49
|
6527 See also:
|
Chris@49
|
6528 <ul>
|
Chris@49
|
6529 <li><a href="#eps">eps()</a></li>
|
Chris@49
|
6530 <li><a href="http://mathworld.wolfram.com/MatrixRank.html">Rank in MathWorld</a></li>
|
Chris@49
|
6531 <li><a href="http://en.wikipedia.org/wiki/Rank_(linear_algebra)">Rank in Wikipedia</a></li>
|
Chris@49
|
6532 </ul>
|
Chris@49
|
6533 </li>
|
Chris@49
|
6534 </ul>
|
Chris@49
|
6535 <br>
|
Chris@49
|
6536 <hr class="greyline"><br>
|
Chris@49
|
6537
|
Chris@49
|
6538 <a name="trace"></a>
|
Chris@49
|
6539 <b>trace(X)</b>
|
Chris@49
|
6540 <ul>
|
Chris@49
|
6541 <li>
|
Chris@49
|
6542 Sum of the diagonal elements of square matrix <i>X</i>
|
Chris@49
|
6543 </li>
|
Chris@49
|
6544 <br>
|
Chris@49
|
6545 <li>
|
Chris@49
|
6546 If <i>X</i> is an expression,
|
Chris@49
|
6547 the function will try to use optimised expression evaluations to calculate only the diagonal elements
|
Chris@49
|
6548 </li>
|
Chris@49
|
6549 <br>
|
Chris@49
|
6550 <li>
|
Chris@49
|
6551 A <i>std::logic_error</i> exception is thrown if <i>X</i> does not evaluate to a square matrix
|
Chris@49
|
6552 </li>
|
Chris@49
|
6553 <br>
|
Chris@49
|
6554 <li>
|
Chris@49
|
6555 Examples:
|
Chris@49
|
6556 <ul>
|
Chris@49
|
6557 <pre>
|
Chris@49
|
6558 mat A = randu<mat>(5,5);
|
Chris@49
|
6559 double x = trace(A);
|
Chris@49
|
6560 </pre>
|
Chris@49
|
6561 </ul>
|
Chris@49
|
6562 </li>
|
Chris@49
|
6563 <br>
|
Chris@49
|
6564 <li>
|
Chris@49
|
6565 See also:
|
Chris@49
|
6566 <ul>
|
Chris@49
|
6567 <li><a href="#accu">accu()</a></li>
|
Chris@49
|
6568 <li><a href="#as_scalar">as_scalar()</a></li>
|
Chris@49
|
6569 <li><a href="#diag">.diag()</a></li>
|
Chris@49
|
6570 <li><a href="#diagvec">diagvec()</a></li>
|
Chris@49
|
6571 <li><a href="#sum">sum()</a></li>
|
Chris@49
|
6572 </ul>
|
Chris@49
|
6573 </li>
|
Chris@49
|
6574 <br>
|
Chris@49
|
6575 </ul>
|
Chris@49
|
6576 <hr class="greyline">
|
Chris@49
|
6577
|
Chris@49
|
6578 <hr class="greyline">
|
Chris@49
|
6579 <br>
|
Chris@49
|
6580 <br>
|
Chris@49
|
6581 <font size=+1><b>Scalar/Vector Valued Functions of Vectors/Matrices</b></font>
|
Chris@49
|
6582 <br>
|
Chris@49
|
6583 <br>
|
Chris@49
|
6584 <hr class="greyline">
|
Chris@49
|
6585 <br>
|
Chris@49
|
6586
|
Chris@49
|
6587 <a name="diagvec"></a>
|
Chris@49
|
6588 <b>diagvec(A, k=0)</b>
|
Chris@49
|
6589 <ul>
|
Chris@49
|
6590 <li>
|
Chris@49
|
6591 Extract the <i>k</i>-th diagonal from matrix <i>A</i>
|
Chris@49
|
6592 </li>
|
Chris@49
|
6593 <br>
|
Chris@49
|
6594 <li>
|
Chris@49
|
6595 The argument <i>k</i> is optional -- by default the main diagonal is extracted (<i>k=0</i>)
|
Chris@49
|
6596 </li>
|
Chris@49
|
6597 <br>
|
Chris@49
|
6598 <li>For <i>k > 0</i>, the <i>k</i>-th super-diagonal is extracted (top-right corner)</li>
|
Chris@49
|
6599 <br>
|
Chris@49
|
6600 <li>For <i>k < 0</i>, the <i>k</i>-th sub-diagonal is extracted (bottom-left corner)</li>
|
Chris@49
|
6601 <br>
|
Chris@49
|
6602 <li>
|
Chris@49
|
6603 An extracted a diagonal is interpreted as a column vector
|
Chris@49
|
6604 </li>
|
Chris@49
|
6605 <br>
|
Chris@49
|
6606 <li>
|
Chris@49
|
6607 Examples:
|
Chris@49
|
6608 <ul>
|
Chris@49
|
6609 <pre>
|
Chris@49
|
6610 mat A = randu<mat>(5,5);
|
Chris@49
|
6611 vec d = diagvec(A);
|
Chris@49
|
6612 </pre>
|
Chris@49
|
6613 </ul>
|
Chris@49
|
6614 </li>
|
Chris@49
|
6615 <br>
|
Chris@49
|
6616 <li>See also:
|
Chris@49
|
6617 <ul>
|
Chris@49
|
6618 <li><a href="#diag">.diag()</a></li>
|
Chris@49
|
6619 <li><a href="#diagmat">diagmat()</a></li>
|
Chris@49
|
6620 <li><a href="#trace">trace()</a></li>
|
Chris@49
|
6621 </ul>
|
Chris@49
|
6622 </li>
|
Chris@49
|
6623 <br>
|
Chris@49
|
6624 </ul>
|
Chris@49
|
6625 <hr class="greyline">
|
Chris@49
|
6626 <br>
|
Chris@49
|
6627
|
Chris@49
|
6628 <a name="min_and_max"></a>
|
Chris@49
|
6629 <b>min(mat, dim=0)</b>
|
Chris@49
|
6630 <br><b>min(rowvec)</b>
|
Chris@49
|
6631 <br><b>min(colvec)</b>
|
Chris@49
|
6632 <br>
|
Chris@49
|
6633 <br><b>max(mat, dim=0)</b>
|
Chris@49
|
6634 <br><b>max(rowvec)</b>
|
Chris@49
|
6635 <br><b>max(colvec)</b>
|
Chris@49
|
6636 <ul>
|
Chris@49
|
6637 <li>
|
Chris@49
|
6638 For a matrix argument, return the extremum value for each column (dim=0), or each row (dim=1)
|
Chris@49
|
6639 </li>
|
Chris@49
|
6640 <br>
|
Chris@49
|
6641 <li>
|
Chris@49
|
6642 For a vector argument, return the extremum value
|
Chris@49
|
6643 </li>
|
Chris@49
|
6644 <br>
|
Chris@49
|
6645 <li>
|
Chris@49
|
6646 Examples:
|
Chris@49
|
6647 <ul>
|
Chris@49
|
6648 <pre>
|
Chris@49
|
6649 colvec q = randu<colvec>(10,1);
|
Chris@49
|
6650 double x = max(q);
|
Chris@49
|
6651
|
Chris@49
|
6652 mat A = randu<mat>(10,10);
|
Chris@49
|
6653 rowvec b = max(A);
|
Chris@49
|
6654
|
Chris@49
|
6655 // same result as max(A)
|
Chris@49
|
6656 // the 0 explicitly indicates
|
Chris@49
|
6657 // "traverse across rows"
|
Chris@49
|
6658 rowvec c = max(A,0);
|
Chris@49
|
6659
|
Chris@49
|
6660 // the 1 explicitly indicates
|
Chris@49
|
6661 // "traverse across columns"
|
Chris@49
|
6662 colvec d = max(A,1);
|
Chris@49
|
6663
|
Chris@49
|
6664 // find the overall maximum value
|
Chris@49
|
6665 double y = max(max(A));
|
Chris@49
|
6666 </pre>
|
Chris@49
|
6667 </ul>
|
Chris@49
|
6668 </li>
|
Chris@49
|
6669 <br>
|
Chris@49
|
6670 <li>
|
Chris@49
|
6671 See also:
|
Chris@49
|
6672 <ul>
|
Chris@49
|
6673 <li><a href="#min_and_max_member">.min() & .max()</a> (member functions of Mat and Cube)</li>
|
Chris@49
|
6674 <li><a href="#running_stat">running_stat</a></li>
|
Chris@49
|
6675 <li><a href="#running_stat_vec">running_stat_vec</a></li>
|
Chris@49
|
6676 </ul>
|
Chris@49
|
6677 </li>
|
Chris@49
|
6678 <br>
|
Chris@49
|
6679 </ul>
|
Chris@49
|
6680 <hr class="greyline"><br>
|
Chris@49
|
6681
|
Chris@49
|
6682 <a name="prod"></a>
|
Chris@49
|
6683 <b>prod(mat, dim=0)</b>
|
Chris@49
|
6684 <br><b>prod(rowvec)</b>
|
Chris@49
|
6685 <br><b>prod(colvec)</b>
|
Chris@49
|
6686 <ul>
|
Chris@49
|
6687 <li>
|
Chris@49
|
6688 For a matrix argument, return the product of elements in each column (dim=0), or each row (dim=1)
|
Chris@49
|
6689 </li>
|
Chris@49
|
6690 <br>
|
Chris@49
|
6691 <li>
|
Chris@49
|
6692 For a vector argument, return the product of all elements
|
Chris@49
|
6693 </li>
|
Chris@49
|
6694 <br>
|
Chris@49
|
6695 <li>
|
Chris@49
|
6696 Examples:
|
Chris@49
|
6697 <ul>
|
Chris@49
|
6698 <pre>
|
Chris@49
|
6699 colvec q = randu<colvec>(10,1);
|
Chris@49
|
6700 double x = prod(q);
|
Chris@49
|
6701
|
Chris@49
|
6702 mat A = randu<mat>(10,10);
|
Chris@49
|
6703 rowvec b = prod(A);
|
Chris@49
|
6704
|
Chris@49
|
6705 // same result as prod(A)
|
Chris@49
|
6706 // the 0 explicitly indicates
|
Chris@49
|
6707 // "traverse across rows"
|
Chris@49
|
6708 rowvec c = prod(A,0);
|
Chris@49
|
6709
|
Chris@49
|
6710 // the 1 explicitly indicates
|
Chris@49
|
6711 // "traverse across columns"
|
Chris@49
|
6712 colvec d = prod(A,1);
|
Chris@49
|
6713
|
Chris@49
|
6714 // find the overall product
|
Chris@49
|
6715 double y = prod(prod(A));
|
Chris@49
|
6716 </pre>
|
Chris@49
|
6717 </ul>
|
Chris@49
|
6718 </li>
|
Chris@49
|
6719 <br>
|
Chris@49
|
6720 <li>
|
Chris@49
|
6721 See also:
|
Chris@49
|
6722 <ul>
|
Chris@49
|
6723 <li><a href="#schur_product">Schur product</a></li>
|
Chris@49
|
6724 </ul>
|
Chris@49
|
6725 </li>
|
Chris@49
|
6726 </ul>
|
Chris@49
|
6727 <br>
|
Chris@49
|
6728 <hr class="greyline"><br>
|
Chris@49
|
6729
|
Chris@49
|
6730
|
Chris@49
|
6731 <a name="sum"></a>
|
Chris@49
|
6732 <b>sum(mat, dim=0)</b>
|
Chris@49
|
6733 <br><b>sum(rowvec)</b>
|
Chris@49
|
6734 <br><b>sum(colvec)</b>
|
Chris@49
|
6735 <ul>
|
Chris@49
|
6736 <li>
|
Chris@49
|
6737 For a matrix argument, return the sum of elements in each column (dim=0), or each row (dim=1)
|
Chris@49
|
6738 </li>
|
Chris@49
|
6739 <br>
|
Chris@49
|
6740 <li>
|
Chris@49
|
6741 For a vector argument, return the sum of all elements
|
Chris@49
|
6742 </li>
|
Chris@49
|
6743 <br>
|
Chris@49
|
6744 <li>
|
Chris@49
|
6745 To get a sum of all the elements regardless of the argument type (ie. matrix or vector),
|
Chris@49
|
6746 you may wish to use <a href="#accu">accu()</a> instead
|
Chris@49
|
6747 </li>
|
Chris@49
|
6748 <br>
|
Chris@49
|
6749 <li>
|
Chris@49
|
6750 Examples:
|
Chris@49
|
6751 <ul>
|
Chris@49
|
6752 <pre>
|
Chris@49
|
6753 colvec q = randu<colvec>(10,1);
|
Chris@49
|
6754 double x = sum(q);
|
Chris@49
|
6755
|
Chris@49
|
6756 mat A = randu<mat>(10,10);
|
Chris@49
|
6757 rowvec b = sum(A);
|
Chris@49
|
6758
|
Chris@49
|
6759 // same result as sum(A)
|
Chris@49
|
6760 // the 0 explicitly indicates
|
Chris@49
|
6761 // "traverse across rows"
|
Chris@49
|
6762 rowvec c = sum(A,0);
|
Chris@49
|
6763
|
Chris@49
|
6764 // the 1 explicitly indicates
|
Chris@49
|
6765 // "traverse across columns"
|
Chris@49
|
6766 colvec d = sum(A,1);
|
Chris@49
|
6767
|
Chris@49
|
6768 // find the overall sum
|
Chris@49
|
6769 double y = sum(sum(A));
|
Chris@49
|
6770 </pre>
|
Chris@49
|
6771 </ul>
|
Chris@49
|
6772 </li>
|
Chris@49
|
6773 <br>
|
Chris@49
|
6774 <li>
|
Chris@49
|
6775 See also:
|
Chris@49
|
6776 <ul>
|
Chris@49
|
6777 <li><a href="#accu">accu()</a></li>
|
Chris@49
|
6778 <li><a href="#cumsum">cumsum()</a></li>
|
Chris@49
|
6779 <li><a href="#trace">trace()</a></li>
|
Chris@49
|
6780 <li><a href="#as_scalar">as_scalar()</a></li>
|
Chris@49
|
6781 </ul>
|
Chris@49
|
6782 </li>
|
Chris@49
|
6783 <br>
|
Chris@49
|
6784 </ul>
|
Chris@49
|
6785 <hr class="greyline"><br>
|
Chris@49
|
6786
|
Chris@49
|
6787
|
Chris@49
|
6788 <a name="stats_fns"></a>
|
Chris@49
|
6789 <b>statistics: mean, median, stddev, var</b>
|
Chris@49
|
6790
|
Chris@49
|
6791 <ul>
|
Chris@49
|
6792 <table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
6793 <tbody>
|
Chris@49
|
6794 <tr>
|
Chris@49
|
6795 <td style="vertical-align: top;">
|
Chris@49
|
6796 <b>mean(mat, dim=0)</b>
|
Chris@49
|
6797 <br><b>mean(colvec)</b>
|
Chris@49
|
6798 <br><b>mean(rowvec)</b>
|
Chris@49
|
6799 <br>
|
Chris@49
|
6800 <br>
|
Chris@49
|
6801 </td>
|
Chris@49
|
6802 <td style="vertical-align: top;">
|
Chris@49
|
6803
|
Chris@49
|
6804 </td>
|
Chris@49
|
6805 <td style="vertical-align: top;">
|
Chris@49
|
6806 mean (average value)
|
Chris@49
|
6807 </td>
|
Chris@49
|
6808 </tr>
|
Chris@49
|
6809 <tr>
|
Chris@49
|
6810 <td style="vertical-align: top;">
|
Chris@49
|
6811 <b>median(mat, dim=0)</b>
|
Chris@49
|
6812 <br><b>median(colvec)</b>
|
Chris@49
|
6813 <br><b>median(rowvec)</b>
|
Chris@49
|
6814 <br>
|
Chris@49
|
6815 <br>
|
Chris@49
|
6816 </td>
|
Chris@49
|
6817 <td style="vertical-align: top;">
|
Chris@49
|
6818
|
Chris@49
|
6819 </td>
|
Chris@49
|
6820 <td style="vertical-align: top;">
|
Chris@49
|
6821 median
|
Chris@49
|
6822 </td>
|
Chris@49
|
6823 </tr>
|
Chris@49
|
6824 <tr>
|
Chris@49
|
6825 <td style="vertical-align: top;">
|
Chris@49
|
6826 <b>stddev(mat, norm_type=0, dim=0)</b>
|
Chris@49
|
6827 <br><b>stddev(colvec, norm_type=0)</b>
|
Chris@49
|
6828 <br><b>stddev(rowvec, norm_type=0)</b>
|
Chris@49
|
6829 <br>
|
Chris@49
|
6830 <br>
|
Chris@49
|
6831 </td>
|
Chris@49
|
6832 <td style="vertical-align: top;">
|
Chris@49
|
6833
|
Chris@49
|
6834 </td>
|
Chris@49
|
6835 <td style="vertical-align: top;">
|
Chris@49
|
6836 standard deviation
|
Chris@49
|
6837 </td>
|
Chris@49
|
6838 </tr>
|
Chris@49
|
6839 <tr>
|
Chris@49
|
6840 <td style="vertical-align: top;">
|
Chris@49
|
6841 <b>var(mat, norm_type=0, dim=0)</b>
|
Chris@49
|
6842 <br><b>var(colvec, norm_type=0)</b>
|
Chris@49
|
6843 <br><b>var(rowvec, norm_type=0)</b>
|
Chris@49
|
6844 <br>
|
Chris@49
|
6845 <br>
|
Chris@49
|
6846 </td>
|
Chris@49
|
6847 <td style="vertical-align: top;">
|
Chris@49
|
6848
|
Chris@49
|
6849 </td>
|
Chris@49
|
6850 <td style="vertical-align: top;">
|
Chris@49
|
6851 variance
|
Chris@49
|
6852 </td>
|
Chris@49
|
6853 </tr>
|
Chris@49
|
6854 </tbody>
|
Chris@49
|
6855 </table>
|
Chris@49
|
6856 <br>
|
Chris@49
|
6857 <li>
|
Chris@49
|
6858 For a matrix argument, find a particular statistic for each column (<i>dim=0</i>), or each row (<i>dim=1</i>)
|
Chris@49
|
6859 </li>
|
Chris@49
|
6860 <br>
|
Chris@49
|
6861 <li>
|
Chris@49
|
6862 For a vector argument, return a particular statistic calculated using all the elements of the vector
|
Chris@49
|
6863 </li>
|
Chris@49
|
6864 <br>
|
Chris@49
|
6865 <li>
|
Chris@49
|
6866 For the var() and stddev() functions, the default <i>norm_type=0</i> performs normalisation using <i>N-1</i> (where <i>N</i> is the number of samples),
|
Chris@49
|
6867 providing the best unbiased estimator.
|
Chris@49
|
6868 Using <i>norm_type=1</i> causes normalisation to be done using <i>N</i>, which provides the second moment around the mean
|
Chris@49
|
6869 </li>
|
Chris@49
|
6870 <br>
|
Chris@49
|
6871 <li>
|
Chris@49
|
6872 Examples:
|
Chris@49
|
6873 <ul>
|
Chris@49
|
6874 <pre>
|
Chris@49
|
6875 mat A = randu<mat>(5,5);
|
Chris@49
|
6876 mat B = mean(A);
|
Chris@49
|
6877 mat C = var(A);
|
Chris@49
|
6878 double m = mean(mean(A));
|
Chris@49
|
6879
|
Chris@49
|
6880 vec q = randu<vec>(5);
|
Chris@49
|
6881 double v = var(q);
|
Chris@49
|
6882 </pre>
|
Chris@49
|
6883 </ul>
|
Chris@49
|
6884 </li>
|
Chris@49
|
6885 <br>
|
Chris@49
|
6886 <li>
|
Chris@49
|
6887 See also:
|
Chris@49
|
6888 <ul>
|
Chris@49
|
6889 <li><a href="#cov">cov()</a></li>
|
Chris@49
|
6890 <li><a href="#cor">cor()</a></li>
|
Chris@49
|
6891 <li><a href="#running_stat">running_stat</a></li>
|
Chris@49
|
6892 <li><a href="#running_stat_vec">running_stat_vec</a></li>
|
Chris@49
|
6893 <li><a href="#hist">hist()</a></li>
|
Chris@49
|
6894 <li><a href="#histc">histc()</a></li>
|
Chris@49
|
6895 </ul>
|
Chris@49
|
6896 </li>
|
Chris@49
|
6897 </ul>
|
Chris@49
|
6898 <br>
|
Chris@49
|
6899 <hr class="greyline">
|
Chris@49
|
6900
|
Chris@49
|
6901 <hr class="greyline">
|
Chris@49
|
6902 <br>
|
Chris@49
|
6903 <br>
|
Chris@49
|
6904 <font size=+1><b>Vector/Matrix/Cube Valued Functions of Vectors/Matrices/Cubes</b></font>
|
Chris@49
|
6905 <br>
|
Chris@49
|
6906 <br>
|
Chris@49
|
6907 <hr class="greyline">
|
Chris@49
|
6908 <br>
|
Chris@49
|
6909
|
Chris@49
|
6910 <a name="conv"></a>
|
Chris@49
|
6911 <b>
|
Chris@49
|
6912 C = conv(A, B)
|
Chris@49
|
6913 </b>
|
Chris@49
|
6914 <ul>
|
Chris@49
|
6915 <li>
|
Chris@49
|
6916 Convolution of vectors <i>A</i> and <i>B</i>
|
Chris@49
|
6917 </li>
|
Chris@49
|
6918 <br>
|
Chris@49
|
6919 <li>
|
Chris@49
|
6920 If <i>A</i> and <i>B</i> are polynomial coefficient vectors, convolving them is equivalent to multiplying the two polynomials
|
Chris@49
|
6921 </li>
|
Chris@49
|
6922 <br>
|
Chris@49
|
6923 <li>
|
Chris@49
|
6924 The convolution operation is also equivalent to FIR filtering
|
Chris@49
|
6925 </li>
|
Chris@49
|
6926 <br>
|
Chris@49
|
6927 <li>
|
Chris@49
|
6928 The orientation of the result vector is the same as the orientation of <i>A</i> (ie. column or row vector)
|
Chris@49
|
6929 </li>
|
Chris@49
|
6930 <br>
|
Chris@49
|
6931 <li>
|
Chris@49
|
6932 Examples:
|
Chris@49
|
6933 <ul>
|
Chris@49
|
6934 <pre>
|
Chris@49
|
6935 vec A = randu<vec>(128) - 0.5;
|
Chris@49
|
6936 vec B = randu<vec>(128) - 0.5;
|
Chris@49
|
6937
|
Chris@49
|
6938 vec C = conv(A,B);
|
Chris@49
|
6939 </pre>
|
Chris@49
|
6940 </ul>
|
Chris@49
|
6941 </li>
|
Chris@49
|
6942 <br>
|
Chris@49
|
6943 <li>
|
Chris@49
|
6944 See also:
|
Chris@49
|
6945 <ul>
|
Chris@49
|
6946 <li><a href="#fft">fft()</a></li>
|
Chris@49
|
6947 <li><a href="#cor">cor()</a></li>
|
Chris@49
|
6948 <li><a href="http://mathworld.wolfram.com/Convolution.html">Convolution in MathWorld</a></li>
|
Chris@49
|
6949 <li><a href="http://en.wikipedia.org/wiki/Convolution">Convolution in Wikipedia</a></li>
|
Chris@49
|
6950 <li><a href="http://en.wikipedia.org/wiki/Finite_impulse_response">FIR filter in Wikipedia</a></li>
|
Chris@49
|
6951 </ul>
|
Chris@49
|
6952 </li>
|
Chris@49
|
6953 </ul>
|
Chris@49
|
6954 <br>
|
Chris@49
|
6955 <hr class="greyline"><br>
|
Chris@49
|
6956
|
Chris@49
|
6957 <a name="conv_to"></a>
|
Chris@49
|
6958 <b>
|
Chris@49
|
6959 conv_to<<i>type</i>>::from(X)
|
Chris@49
|
6960 </b>
|
Chris@49
|
6961 <ul>
|
Chris@49
|
6962 <li>
|
Chris@49
|
6963 A form of casting
|
Chris@49
|
6964 </li>
|
Chris@49
|
6965 <br>
|
Chris@49
|
6966 <li>
|
Chris@49
|
6967 Convert between matrix/vector types (eg. <i>mat</i> to <i>fmat</i>), as well as cube types (eg. <i>cube</i> to <i>fcube</i>)
|
Chris@49
|
6968 </li>
|
Chris@49
|
6969 <br>
|
Chris@49
|
6970 <li>
|
Chris@49
|
6971 Conversion between <i>std::vector</i> and Armadillo matrices/vectors is also possible
|
Chris@49
|
6972 </li>
|
Chris@49
|
6973 <br>
|
Chris@49
|
6974 <li>
|
Chris@49
|
6975 Conversion of a <i>mat</i> object into <i>colvec</i>, <i>rowvec</i> or <i>std::vector</i> is possible if the object can be interpreted as a vector
|
Chris@49
|
6976 </li>
|
Chris@49
|
6977 <br>
|
Chris@49
|
6978 <li>
|
Chris@49
|
6979 Examples:
|
Chris@49
|
6980 <ul>
|
Chris@49
|
6981 <pre>
|
Chris@49
|
6982 mat A = randu<mat>(5,5);
|
Chris@49
|
6983 fmat B = conv_to<fmat>::from(A);
|
Chris@49
|
6984
|
Chris@49
|
6985 typedef std::vector<double> stdvec;
|
Chris@49
|
6986
|
Chris@49
|
6987 stdvec x(3);
|
Chris@49
|
6988 x[0] = 0.0; x[1] = 1.0; x[2] = 2.0;
|
Chris@49
|
6989
|
Chris@49
|
6990 colvec y = conv_to< colvec >::from(x);
|
Chris@49
|
6991 stdvec z = conv_to< stdvec >::from(y);
|
Chris@49
|
6992 </pre>
|
Chris@49
|
6993 </ul>
|
Chris@49
|
6994 </li>
|
Chris@49
|
6995 <br>
|
Chris@49
|
6996 <li>
|
Chris@49
|
6997 See also:
|
Chris@49
|
6998 <ul>
|
Chris@49
|
6999 <li><a href="#as_scalar">as_scalar()</a></li>
|
Chris@49
|
7000 <li><a href="#reshape">reshape()</a></li>
|
Chris@49
|
7001 <li><a href="#resize">resize()</a></li>
|
Chris@49
|
7002 <li><a href="#adv_constructors_mat">advanced constructors (matrices)</a></li>
|
Chris@49
|
7003 <li><a href="#adv_constructors_cube">advanced constructors (cubes)</a></li>
|
Chris@49
|
7004 </ul>
|
Chris@49
|
7005 </li>
|
Chris@49
|
7006 <br>
|
Chris@49
|
7007 </ul>
|
Chris@49
|
7008 <hr class="greyline"><br>
|
Chris@49
|
7009
|
Chris@49
|
7010 <a name="conj"></a>
|
Chris@49
|
7011 <b>conj(cx_mat)</b>
|
Chris@49
|
7012 <br><b>conj(cx_cube)</b>
|
Chris@49
|
7013 <ul>
|
Chris@49
|
7014 <li>
|
Chris@49
|
7015 Obtain the complex conjugate of each element in a complex matrix/cube
|
Chris@49
|
7016 </li>
|
Chris@49
|
7017 <br>
|
Chris@49
|
7018 <li>
|
Chris@49
|
7019 Examples:
|
Chris@49
|
7020 <ul>
|
Chris@49
|
7021 <pre>
|
Chris@49
|
7022 cx_mat X = randu<cx_mat>(5,5);
|
Chris@49
|
7023 cx_mat Y = conj(X);
|
Chris@49
|
7024 </pre>
|
Chris@49
|
7025 </ul>
|
Chris@49
|
7026 </li>
|
Chris@49
|
7027 <br>
|
Chris@49
|
7028 <li>See also:
|
Chris@49
|
7029 <ul>
|
Chris@49
|
7030 <li><a href="#trans">trans()</a></li>
|
Chris@49
|
7031 </ul>
|
Chris@49
|
7032 </li>
|
Chris@49
|
7033 <br>
|
Chris@49
|
7034 </ul>
|
Chris@49
|
7035 <hr class="greyline"><br>
|
Chris@49
|
7036
|
Chris@49
|
7037 <a name="cor"></a>
|
Chris@49
|
7038 <b>cor(X, Y, norm_type=0)</b>
|
Chris@49
|
7039 <br><b>cor(X, norm_type=0)</b>
|
Chris@49
|
7040 <ul>
|
Chris@49
|
7041 <li>
|
Chris@49
|
7042 For two matrix arguments <i>X</i> and <i>Y</i>,
|
Chris@49
|
7043 if each row of <i>X</i> and <i>Y</i> is an observation and each column is a variable,
|
Chris@49
|
7044 the <i>(i,j)</i>-th entry of <i>cor(X,Y)</i> is the correlation coefficient between the <i>i</i>-th variable in <i>X</i> and the <i>j</i>-th variable in <i>Y</i>
|
Chris@49
|
7045 </li>
|
Chris@49
|
7046 <br>
|
Chris@49
|
7047 <li>
|
Chris@49
|
7048 For vector arguments, the type of vector is ignored and each element in the vector is treated as an observation
|
Chris@49
|
7049 </li>
|
Chris@49
|
7050 <br>
|
Chris@49
|
7051 <li>
|
Chris@49
|
7052 For matrices, <i>X</i> and <i>Y</i> must have the same dimensions
|
Chris@49
|
7053 </li>
|
Chris@49
|
7054 <br>
|
Chris@49
|
7055 <li>
|
Chris@49
|
7056 For vectors, <i>X</i> and <i>Y</i> must have the same number of elements
|
Chris@49
|
7057 </li>
|
Chris@49
|
7058 <br>
|
Chris@49
|
7059 <li>
|
Chris@49
|
7060 <i>cor(X)</i> is equivalent to <i>cor(X, X)</i>, also called autocorrelation
|
Chris@49
|
7061 </li>
|
Chris@49
|
7062 <br>
|
Chris@49
|
7063 <li>
|
Chris@49
|
7064 The default <i>norm_type=0</i> performs normalisation of the correlation matrix using <i>N-1</i> (where <i>N</i> is the number of observations).
|
Chris@49
|
7065 Using <i>norm_type=1</i> causes normalisation to be done using <i>N</i>
|
Chris@49
|
7066 </li>
|
Chris@49
|
7067 <br>
|
Chris@49
|
7068 <li>
|
Chris@49
|
7069 Examples:
|
Chris@49
|
7070 <ul>
|
Chris@49
|
7071 <pre>
|
Chris@49
|
7072 mat X = randu<mat>(4,5);
|
Chris@49
|
7073 mat Y = randu<mat>(4,5);
|
Chris@49
|
7074
|
Chris@49
|
7075 mat R = cor(X,Y);
|
Chris@49
|
7076 </pre>
|
Chris@49
|
7077 </ul>
|
Chris@49
|
7078 </li>
|
Chris@49
|
7079 <br>
|
Chris@49
|
7080 <li>
|
Chris@49
|
7081 See also:
|
Chris@49
|
7082 <ul>
|
Chris@49
|
7083 <li><a href="http://mathworld.wolfram.com/Correlation.html">Correlation in MathWorld</a></li>
|
Chris@49
|
7084 <li><a href="http://mathworld.wolfram.com/Autocorrelation.html">Autocorrelation in MathWorld</a></li>
|
Chris@49
|
7085 <li><a href="#cov">cov()</a></li>
|
Chris@49
|
7086 <li><a href="#conv">conv()</a></li>
|
Chris@49
|
7087 </ul>
|
Chris@49
|
7088 </li>
|
Chris@49
|
7089 </ul>
|
Chris@49
|
7090 <br>
|
Chris@49
|
7091 <hr class="greyline"><br>
|
Chris@49
|
7092
|
Chris@49
|
7093 <a name="cov"></a>
|
Chris@49
|
7094 <b>cov(X, Y, norm_type=0)</b>
|
Chris@49
|
7095 <br><b>cov(X, norm_type=0)</b>
|
Chris@49
|
7096 <ul>
|
Chris@49
|
7097 <li>
|
Chris@49
|
7098 For two matrix arguments <i>X</i> and <i>Y</i>,
|
Chris@49
|
7099 if each row of <i>X</i> and <i>Y</i> is an observation and each column is a variable,
|
Chris@49
|
7100 the <i>(i,j)</i>-th entry of <i>cov(X,Y)</i> is the covariance between the <i>i</i>-th variable in <i>X</i> and the <i>j</i>-th variable in <i>Y</i>
|
Chris@49
|
7101 </li>
|
Chris@49
|
7102 <br>
|
Chris@49
|
7103 <li>
|
Chris@49
|
7104 For vector arguments, the type of vector is ignored and each element in the vector is treated as an observation
|
Chris@49
|
7105 </li>
|
Chris@49
|
7106 <br>
|
Chris@49
|
7107 <li>
|
Chris@49
|
7108 For matrices, <i>X</i> and <i>Y</i> must have the same dimensions
|
Chris@49
|
7109 </li>
|
Chris@49
|
7110 <br>
|
Chris@49
|
7111 <li>
|
Chris@49
|
7112 For vectors, <i>X</i> and <i>Y</i> must have the same number of elements
|
Chris@49
|
7113 </li>
|
Chris@49
|
7114 <br>
|
Chris@49
|
7115 <li>
|
Chris@49
|
7116 <i>cov(X)</i> is equivalent to <i>cov(X, X)</i>
|
Chris@49
|
7117 </li>
|
Chris@49
|
7118 <br>
|
Chris@49
|
7119 <li>
|
Chris@49
|
7120 The default <i>norm_type=0</i> performs normalisation using <i>N-1</i> (where <i>N</i> is the number of observations),
|
Chris@49
|
7121 providing the best unbiased estimation of the covariance matrix (if the observations are from a normal distribution).
|
Chris@49
|
7122 Using <i>norm_type=1</i> causes normalisation to be done using <i>N</i>, which provides the second moment matrix of the observations about their mean
|
Chris@49
|
7123 </li>
|
Chris@49
|
7124 <br>
|
Chris@49
|
7125 <li>
|
Chris@49
|
7126 Examples:
|
Chris@49
|
7127 <ul>
|
Chris@49
|
7128 <pre>
|
Chris@49
|
7129 mat X = randu<mat>(4,5);
|
Chris@49
|
7130 mat Y = randu<mat>(4,5);
|
Chris@49
|
7131
|
Chris@49
|
7132 mat C = cov(X,Y);
|
Chris@49
|
7133 </pre>
|
Chris@49
|
7134 </ul>
|
Chris@49
|
7135 </li>
|
Chris@49
|
7136 <br>
|
Chris@49
|
7137 <li>
|
Chris@49
|
7138 See also:
|
Chris@49
|
7139 <ul>
|
Chris@49
|
7140 <li><a href="#running_stat_vec">running_stat_vec</a></li>
|
Chris@49
|
7141 <li><a href="#stats_fns">statistics functions</a></li>
|
Chris@49
|
7142 <li><a href="http://mathworld.wolfram.com/Covariance.html">Covariance in MathWorld</a></li>
|
Chris@49
|
7143 <li><a href="#cor">cor()</a></li>
|
Chris@49
|
7144 </ul>
|
Chris@49
|
7145 </li>
|
Chris@49
|
7146 </ul>
|
Chris@49
|
7147 <br>
|
Chris@49
|
7148 <hr class="greyline"><br>
|
Chris@49
|
7149
|
Chris@49
|
7150 <a name="cross"></a>
|
Chris@49
|
7151 <b>cross(A, B)</b>
|
Chris@49
|
7152 <ul>
|
Chris@49
|
7153 <li>
|
Chris@49
|
7154 Calculate the cross product between A and B, under the assumption that A and B are 3 dimensional vectors
|
Chris@49
|
7155 </li>
|
Chris@49
|
7156 <br>
|
Chris@49
|
7157 <li>
|
Chris@49
|
7158 Examples:
|
Chris@49
|
7159 <ul>
|
Chris@49
|
7160 <pre>
|
Chris@49
|
7161 vec a = randu<vec>(3);
|
Chris@49
|
7162 vec b = randu<vec>(3);
|
Chris@49
|
7163
|
Chris@49
|
7164 vec c = cross(a,b);
|
Chris@49
|
7165 </pre>
|
Chris@49
|
7166 </ul>
|
Chris@49
|
7167 </li>
|
Chris@49
|
7168 <br>
|
Chris@49
|
7169 <li>
|
Chris@49
|
7170 See also:
|
Chris@49
|
7171 <ul>
|
Chris@49
|
7172 <li><a href="#dot">dot()</a></li>
|
Chris@49
|
7173 <li><a href="http://en.wikipedia.org/wiki/Cross_product">Cross product in Wikipedia</a></li>
|
Chris@49
|
7174 <li><a href="http://mathworld.wolfram.com/CrossProduct.html">Cross product in MathWorld</a></li>
|
Chris@49
|
7175 </ul>
|
Chris@49
|
7176 </li>
|
Chris@49
|
7177 </ul>
|
Chris@49
|
7178 <br>
|
Chris@49
|
7179 <hr class="greyline"><br>
|
Chris@49
|
7180
|
Chris@49
|
7181 <a name="cumsum"></a>
|
Chris@49
|
7182 <b>cumsum(mat, dim=0)</b>
|
Chris@49
|
7183 <br><b>cumsum(rowvec)</b>
|
Chris@49
|
7184 <br><b>cumsum(colvec)</b>
|
Chris@49
|
7185 <ul>
|
Chris@49
|
7186 <li>
|
Chris@49
|
7187 For a matrix argument, return a matrix containing the cumulative sum of elements in each column (dim=0, the default), or each row (dim=1)
|
Chris@49
|
7188 </li>
|
Chris@49
|
7189 <br>
|
Chris@49
|
7190 <li>
|
Chris@49
|
7191 For a vector argument, return a vector of the same orientation, containing the cumulative sum of elements
|
Chris@49
|
7192 </li>
|
Chris@49
|
7193 <br>
|
Chris@49
|
7194 <li>
|
Chris@49
|
7195 Examples:
|
Chris@49
|
7196 <ul>
|
Chris@49
|
7197 <pre>
|
Chris@49
|
7198 mat A = randu<mat>(5,5);
|
Chris@49
|
7199 mat B = cumsum(A);
|
Chris@49
|
7200
|
Chris@49
|
7201 vec x = randu<vec>(10);
|
Chris@49
|
7202 vec y = cumsum(x);
|
Chris@49
|
7203 </pre>
|
Chris@49
|
7204 </ul>
|
Chris@49
|
7205 </li>
|
Chris@49
|
7206 <br>
|
Chris@49
|
7207 <li>
|
Chris@49
|
7208 See also:
|
Chris@49
|
7209 <ul>
|
Chris@49
|
7210 <li><a href="#accu">accu()</a></li>
|
Chris@49
|
7211 <li><a href="#sum">sum()</a></li>
|
Chris@49
|
7212 </ul>
|
Chris@49
|
7213 </li>
|
Chris@49
|
7214 <br>
|
Chris@49
|
7215 </ul>
|
Chris@49
|
7216 <hr class="greyline"><br>
|
Chris@49
|
7217
|
Chris@49
|
7218 <a name="diagmat"></a>
|
Chris@49
|
7219 <b>diagmat(X)</b>
|
Chris@49
|
7220 <ul>
|
Chris@49
|
7221 <li>
|
Chris@49
|
7222 Interpret a matrix or vector <i>X</i> as a diagonal matrix
|
Chris@49
|
7223 </li>
|
Chris@49
|
7224 <br>
|
Chris@49
|
7225 <li>
|
Chris@49
|
7226 If <i>X</i> is a matrix, the matrix must be square; the main diagonal is copied and all other elements in the generated matrix are set to zero
|
Chris@49
|
7227 </li>
|
Chris@49
|
7228 <br>
|
Chris@49
|
7229 <li>
|
Chris@49
|
7230 If <i>X</i> is a vector, elements of the vector are placed on the main diagonal in the generated matrix and all other elements are set to zero
|
Chris@49
|
7231 </li>
|
Chris@49
|
7232 <br>
|
Chris@49
|
7233 <li>
|
Chris@49
|
7234 Examples:
|
Chris@49
|
7235 <ul>
|
Chris@49
|
7236 <pre>
|
Chris@49
|
7237 mat A = randu<mat>(5,5);
|
Chris@49
|
7238 mat B = diagmat(A);
|
Chris@49
|
7239 mat C = A*diagmat(A);
|
Chris@49
|
7240
|
Chris@49
|
7241 rowvec q = randu<rowvec>(5);
|
Chris@49
|
7242 colvec r = randu<colvec>(5);
|
Chris@49
|
7243 mat X = diagmat(q)*diagmat(r);
|
Chris@49
|
7244 </pre>
|
Chris@49
|
7245 </ul>
|
Chris@49
|
7246 </li>
|
Chris@49
|
7247 <br>
|
Chris@49
|
7248 <li>
|
Chris@49
|
7249 See also:
|
Chris@49
|
7250 <ul>
|
Chris@49
|
7251 <li><a href="#diagvec">diagvec()</a></li>
|
Chris@49
|
7252 <li><a href="#diag">.diag()</a></li>
|
Chris@49
|
7253 <li><a href="#trimat">trimatu() / trimatl()</a></li>
|
Chris@49
|
7254 <li><a href="#symmat">symmatu() / symmatl()</a></li>
|
Chris@49
|
7255 <li><a href="#reshape">reshape()</a></li>
|
Chris@49
|
7256 </ul>
|
Chris@49
|
7257 </li>
|
Chris@49
|
7258 <br>
|
Chris@49
|
7259 </ul>
|
Chris@49
|
7260 <hr class="greyline">
|
Chris@49
|
7261 <br>
|
Chris@49
|
7262
|
Chris@49
|
7263 <a name="find"></a>
|
Chris@49
|
7264 <b>find(X, k=0, s="first")</b>
|
Chris@49
|
7265 <ul>
|
Chris@49
|
7266 <li>Return a column vector of the indices of non-zero elements of <i>X</i></li>
|
Chris@49
|
7267 <br>
|
Chris@49
|
7268 <li>The output vector must have the type <a href="#Col">uvec</a> or <a href="#Mat">umat</a>
|
Chris@49
|
7269 (ie. the indices are stored as unsigned integers of type <a href="#uword">uword</a>)
|
Chris@49
|
7270 </li>
|
Chris@49
|
7271 <br>
|
Chris@49
|
7272 <li>
|
Chris@49
|
7273 The input matrix <i>X</i> is interpreted as a vector, with column-by-column ordering of the elements of <i>X</i>
|
Chris@49
|
7274 </li>
|
Chris@49
|
7275 <br>
|
Chris@49
|
7276 <li>Relational operators can be used instead of <i>X</i>, eg. <i>A > 0.5</i>
|
Chris@49
|
7277 </li>
|
Chris@49
|
7278 <br>
|
Chris@49
|
7279 <li>If <i>k=0</i> (default), return the indices of all non-zero elements, otherwise return at most <i>k</i> of their indices</li>
|
Chris@49
|
7280 <br>
|
Chris@49
|
7281 <li>If <i>s="first"</i> (default), return at most the first <i>k</i> indices of the non-zero elements
|
Chris@49
|
7282 </li>
|
Chris@49
|
7283 <br>
|
Chris@49
|
7284 <li>If <i>s="last"</i>, return at most the last <i>k</i> indices of the non-zero elements
|
Chris@49
|
7285 </li>
|
Chris@49
|
7286 <br>
|
Chris@49
|
7287 <li>
|
Chris@49
|
7288 Examples:
|
Chris@49
|
7289 <ul>
|
Chris@49
|
7290 <pre>
|
Chris@49
|
7291 mat A = randu<mat>(5,5);
|
Chris@49
|
7292 mat B = randu<mat>(5,5);
|
Chris@49
|
7293
|
Chris@49
|
7294 uvec q1 = find(A > B);
|
Chris@49
|
7295 uvec q2 = find(A > 0.5);
|
Chris@49
|
7296 uvec q3 = find(A > 0.5, 3, "last");
|
Chris@49
|
7297 </pre>
|
Chris@49
|
7298 </ul>
|
Chris@49
|
7299 </li>
|
Chris@49
|
7300 <br>
|
Chris@49
|
7301 <li>
|
Chris@49
|
7302 See also:
|
Chris@49
|
7303 <ul>
|
Chris@49
|
7304 <li><a href="#unique">unique()</a></li>
|
Chris@49
|
7305 <li><a href="#conv_to">conv_to()</a> (convert between matrix/vector types)</li>
|
Chris@49
|
7306 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
7307 <li><a href="#sort_index">sort_index()</a></li>
|
Chris@49
|
7308 </ul>
|
Chris@49
|
7309 </li>
|
Chris@49
|
7310 <br>
|
Chris@49
|
7311 </ul>
|
Chris@49
|
7312 <hr class="greyline">
|
Chris@49
|
7313 <br>
|
Chris@49
|
7314
|
Chris@49
|
7315 <a name="flip"></a>
|
Chris@49
|
7316 <b>fliplr(mat)</b>
|
Chris@49
|
7317 <br><b>flipud(mat)</b>
|
Chris@49
|
7318 <ul>
|
Chris@49
|
7319 <li>
|
Chris@49
|
7320 fliplr(): generate a copy of the input matrix, with the order of the columns reversed
|
Chris@49
|
7321 </li>
|
Chris@49
|
7322 <br>
|
Chris@49
|
7323 <li>
|
Chris@49
|
7324 flipud(): generate a copy of the input matrix, with the order of the rows reversed
|
Chris@49
|
7325 </li>
|
Chris@49
|
7326 <br>
|
Chris@49
|
7327 <li>
|
Chris@49
|
7328 Examples:
|
Chris@49
|
7329 <ul>
|
Chris@49
|
7330 <pre>
|
Chris@49
|
7331 mat A = randu<mat>(5,5);
|
Chris@49
|
7332
|
Chris@49
|
7333 mat B = fliplr(A);
|
Chris@49
|
7334 mat C = flipud(A);
|
Chris@49
|
7335 </pre>
|
Chris@49
|
7336 </ul>
|
Chris@49
|
7337 </li>
|
Chris@49
|
7338 <br>
|
Chris@49
|
7339 <li>
|
Chris@49
|
7340 See also:
|
Chris@49
|
7341 <ul>
|
Chris@49
|
7342 <li><a href="#swap_rows">.swap_rows() & .swap_cols()</a> (member functions of <i>Mat</i>, <i>Col</i> and <i>Row</i> classes)</li>
|
Chris@49
|
7343 </ul>
|
Chris@49
|
7344 </li>
|
Chris@49
|
7345 <br>
|
Chris@49
|
7346 </ul>
|
Chris@49
|
7347 <hr class="greyline"><br>
|
Chris@49
|
7348
|
Chris@49
|
7349 <a name="hist"></a>
|
Chris@49
|
7350 <b>hist(V, n_bins=10)</b>
|
Chris@49
|
7351 <br><b>hist(X, n_bins=10, dim=0)</b>
|
Chris@49
|
7352 <br>
|
Chris@49
|
7353 <br><b>hist(V, centers)</b>
|
Chris@49
|
7354 <br><b>hist(X, centers, dim=0)</b>
|
Chris@49
|
7355 <ul>
|
Chris@49
|
7356 <li>
|
Chris@49
|
7357 For vector <i>V</i>,
|
Chris@49
|
7358 produce an unsigned vector of the same orientation as <i>V</i> (ie. either <a href="#Col">uvec</a> or <a href="#Row">urowvec</a>)
|
Chris@49
|
7359 that represents a histogram of counts
|
Chris@49
|
7360 </li>
|
Chris@49
|
7361 <br>
|
Chris@49
|
7362 <li>
|
Chris@49
|
7363 For matrix <i>X</i>,
|
Chris@49
|
7364 produce a <a href="#Mat">umat</a> matrix containing either
|
Chris@49
|
7365 column histogram counts (for <i>dim=0</i>, default),
|
Chris@49
|
7366 or
|
Chris@49
|
7367 row histogram counts (for <i>dim=1</i>)
|
Chris@49
|
7368 </li>
|
Chris@49
|
7369 <br>
|
Chris@49
|
7370 <li>
|
Chris@49
|
7371 The bin centers can be automatically determined from the data, with the number of bins specified via <i>n_bins</i> (default is 10);
|
Chris@49
|
7372 the range of the bins is determined by the range of the data
|
Chris@49
|
7373 </li>
|
Chris@49
|
7374 <br>
|
Chris@49
|
7375 <li>
|
Chris@49
|
7376 The bin centers can also be explicitly specified via the <i>centers</i> vector;
|
Chris@49
|
7377 the vector must contain monotonically increasing values (eg. 0.1, 0.2, 0.3, ...)
|
Chris@49
|
7378 </li>
|
Chris@49
|
7379 <br>
|
Chris@49
|
7380 <li>
|
Chris@49
|
7381 This function was added in version 3.0
|
Chris@49
|
7382 </li>
|
Chris@49
|
7383 <br>
|
Chris@49
|
7384 <li>
|
Chris@49
|
7385 Examples:
|
Chris@49
|
7386 <ul>
|
Chris@49
|
7387 <pre>
|
Chris@49
|
7388 vec v = randn<vec>(1000); // Gaussian distribution
|
Chris@49
|
7389
|
Chris@49
|
7390 uvec h1 = hist(v, 11);
|
Chris@49
|
7391 uvec h2 = hist(v, linspace<vec>(-2,2,11));
|
Chris@49
|
7392 </pre>
|
Chris@49
|
7393 </ul>
|
Chris@49
|
7394 </li>
|
Chris@49
|
7395 <br>
|
Chris@49
|
7396 <li>See also:
|
Chris@49
|
7397 <ul>
|
Chris@49
|
7398 <li><a href="#histc">histc()</a></li>
|
Chris@49
|
7399 <li><a href="#stats_fns">statistics functions</a></li>
|
Chris@49
|
7400 <li><a href="#conv_to">conv_to()</a></li>
|
Chris@49
|
7401 </ul>
|
Chris@49
|
7402 </li>
|
Chris@49
|
7403 <br>
|
Chris@49
|
7404 </ul>
|
Chris@49
|
7405 <hr class="greyline"><br>
|
Chris@49
|
7406
|
Chris@49
|
7407 <a name="histc"></a>
|
Chris@49
|
7408 <b>histc(V, edges)</b>
|
Chris@49
|
7409 <br><b>histc(X, edges, dim=0)</b>
|
Chris@49
|
7410 <ul>
|
Chris@49
|
7411 <li>
|
Chris@49
|
7412 For vector <i>V</i>,
|
Chris@49
|
7413 produce an unsigned vector of the same orientation as <i>V</i> (ie. either <a href="#Col">uvec</a> or <a href="#Row">urowvec</a>)
|
Chris@49
|
7414 that contains the counts of the number of values that fall between the elements in the <i>edges</i> vector
|
Chris@49
|
7415 </li>
|
Chris@49
|
7416 <br>
|
Chris@49
|
7417 <li>
|
Chris@49
|
7418 For matrix <i>X</i>,
|
Chris@49
|
7419 produce a <i>umat</i> matrix containing either
|
Chris@49
|
7420 column histogram counts (for <i>dim=0</i>, default),
|
Chris@49
|
7421 or
|
Chris@49
|
7422 row histogram counts (for <i>dim=1</i>)
|
Chris@49
|
7423 </li>
|
Chris@49
|
7424 <br>
|
Chris@49
|
7425 <li>
|
Chris@49
|
7426 The <i>edges</i> vector must contain monotonically increasing values (eg. 0.1, 0.2, 0.3, ...)
|
Chris@49
|
7427 </li>
|
Chris@49
|
7428 <br>
|
Chris@49
|
7429 <li>
|
Chris@49
|
7430 This function was added in version 3.0
|
Chris@49
|
7431 </li>
|
Chris@49
|
7432 <br>
|
Chris@49
|
7433 <li>
|
Chris@49
|
7434 Examples:
|
Chris@49
|
7435 <ul>
|
Chris@49
|
7436 <pre>
|
Chris@49
|
7437 vec v = randn<vec>(1000); // Gaussian distribution
|
Chris@49
|
7438
|
Chris@49
|
7439 uvec h = histc(v, linspace<vec>(-2,2,11));
|
Chris@49
|
7440 </pre>
|
Chris@49
|
7441 </ul>
|
Chris@49
|
7442 </li>
|
Chris@49
|
7443 <br>
|
Chris@49
|
7444 <li>See also:
|
Chris@49
|
7445 <ul>
|
Chris@49
|
7446 <li><a href="#hist">hist()</a></li>
|
Chris@49
|
7447 <li><a href="#stats_fns">statistics functions</a></li>
|
Chris@49
|
7448 <li><a href="#conv_to">conv_to()</a></li>
|
Chris@49
|
7449 </ul>
|
Chris@49
|
7450 </li>
|
Chris@49
|
7451 <br>
|
Chris@49
|
7452 </ul>
|
Chris@49
|
7453 <hr class="greyline"><br>
|
Chris@49
|
7454
|
Chris@49
|
7455 <a name="imag_real"></a>
|
Chris@49
|
7456 <b>imag(cx_mat)</b>
|
Chris@49
|
7457 <br><b>imag(cx_cube)</b>
|
Chris@49
|
7458 <br>
|
Chris@49
|
7459 <br><b>real(cx_mat)</b>
|
Chris@49
|
7460 <br><b>real(cx_cube)</b>
|
Chris@49
|
7461 <ul>
|
Chris@49
|
7462 <li>
|
Chris@49
|
7463 Extract the imaginary/real part of a complex matrix/cube
|
Chris@49
|
7464 </li>
|
Chris@49
|
7465 <br>
|
Chris@49
|
7466 <li>
|
Chris@49
|
7467 Examples:
|
Chris@49
|
7468 <ul>
|
Chris@49
|
7469 <pre>
|
Chris@49
|
7470 cx_mat C = randu<cx_mat>(5,5);
|
Chris@49
|
7471
|
Chris@49
|
7472 mat A = imag(C);
|
Chris@49
|
7473 mat B = real(C);
|
Chris@49
|
7474 </pre>
|
Chris@49
|
7475 </ul>
|
Chris@49
|
7476 </li>
|
Chris@49
|
7477 <br>
|
Chris@49
|
7478 <li><b>Caveat:</b> versions 4.4, 4.5 and 4.6 of the GCC C++ compiler have a bug when using the <i>-std=c++0x</i> compiler option (ie. experimental support for C++11);
|
Chris@49
|
7479 to work around this bug, preface Armadillo's imag() and real() with the <i>arma</i> namespace qualification, eg. arma::imag(C)
|
Chris@49
|
7480 </li>
|
Chris@49
|
7481 <br>
|
Chris@49
|
7482 <li>See also:
|
Chris@49
|
7483 <ul>
|
Chris@49
|
7484 <li><a href="#set_imag">set_imag() / set_real()</a></li>
|
Chris@49
|
7485 </ul>
|
Chris@49
|
7486 </li>
|
Chris@49
|
7487 <br>
|
Chris@49
|
7488 </ul>
|
Chris@49
|
7489 <hr class="greyline"><br>
|
Chris@49
|
7490
|
Chris@49
|
7491 <a name="join"></a>
|
Chris@49
|
7492 <b>join_rows(mat A, mat B)</b>
|
Chris@49
|
7493 <br><b>join_cols(mat A, mat B)</b>
|
Chris@49
|
7494 <br><b>join_slices(cube A, cube B)</b>
|
Chris@49
|
7495 <ul>
|
Chris@49
|
7496 <li>
|
Chris@49
|
7497 join_rows():
|
Chris@49
|
7498 for two matrices A and B, append each row of B to its respective row of A;
|
Chris@49
|
7499 matrices A and B must have the same number of rows
|
Chris@49
|
7500 </li>
|
Chris@49
|
7501 <br>
|
Chris@49
|
7502 <li>
|
Chris@49
|
7503 join_cols():
|
Chris@49
|
7504 for two matrices A and B, append each column of B to its respective column of A;
|
Chris@49
|
7505 matrices A and B must have the same number of columns
|
Chris@49
|
7506 </li>
|
Chris@49
|
7507 <br>
|
Chris@49
|
7508 <li>
|
Chris@49
|
7509 join_slices():
|
Chris@49
|
7510 for two cubes A and B, append the slices of B to the slices of A;
|
Chris@49
|
7511 cubes A and B have the same number of rows and columns (ie. all slices must have the same size)
|
Chris@49
|
7512 </li>
|
Chris@49
|
7513 <br>
|
Chris@49
|
7514 <li>
|
Chris@49
|
7515 Examples:
|
Chris@49
|
7516 <ul>
|
Chris@49
|
7517 <pre>
|
Chris@49
|
7518 mat A = randu<mat>(4,5);
|
Chris@49
|
7519 mat B = randu<mat>(4,6);
|
Chris@49
|
7520 mat C = randu<mat>(6,5);
|
Chris@49
|
7521
|
Chris@49
|
7522 mat X = join_rows(A,B);
|
Chris@49
|
7523 mat Y = join_cols(A,C);
|
Chris@49
|
7524 </pre>
|
Chris@49
|
7525 </ul>
|
Chris@49
|
7526 </li>
|
Chris@49
|
7527 <br>
|
Chris@49
|
7528 <li>
|
Chris@49
|
7529 See also:
|
Chris@49
|
7530 <ul>
|
Chris@49
|
7531 <li><a href="#shed">shed rows/columns/slices</a></li>
|
Chris@49
|
7532 <li><a href="#insert">insert rows/columns/slices</a></li>
|
Chris@49
|
7533 <li><a href="#submat">submatrix views</a></li>
|
Chris@49
|
7534 <li><a href="#subcube">subcube views</a></li>
|
Chris@49
|
7535 </ul>
|
Chris@49
|
7536 </li>
|
Chris@49
|
7537 <br>
|
Chris@49
|
7538 </ul>
|
Chris@49
|
7539 <hr class="greyline"><br>
|
Chris@49
|
7540
|
Chris@49
|
7541 <a name="kron"></a>
|
Chris@49
|
7542 <b>kron(A,B)</b>
|
Chris@49
|
7543
|
Chris@49
|
7544 <ul>
|
Chris@49
|
7545 <li>Kronecker tensor product.</li>
|
Chris@49
|
7546 <br>
|
Chris@49
|
7547 <li>Using matrix <i>A</i> (with <i>n</i> rows and <i>p</i> columns) and matrix <i>B</i> (with <i>m</i> rows and <i>q</i> columns),
|
Chris@49
|
7548 <i>kron(A,B)</i> returns a matrix (with <i>nm</i> rows and <i>pq</i> columns) which denotes the tensor product of <i>A</i> and <i>B</i>
|
Chris@49
|
7549 </li>
|
Chris@49
|
7550 <br>
|
Chris@49
|
7551 <li>
|
Chris@49
|
7552 Examples:
|
Chris@49
|
7553 <ul>
|
Chris@49
|
7554 <pre>
|
Chris@49
|
7555 mat A = randu<mat>(4,5);
|
Chris@49
|
7556 mat B = randu<mat>(5,4);
|
Chris@49
|
7557
|
Chris@49
|
7558 mat K = kron(A,B);
|
Chris@49
|
7559 </pre>
|
Chris@49
|
7560 </ul>
|
Chris@49
|
7561 </li>
|
Chris@49
|
7562 <br>
|
Chris@49
|
7563 <li>
|
Chris@49
|
7564 See also:
|
Chris@49
|
7565 <ul>
|
Chris@49
|
7566 <li><a href="http://mathworld.wolfram.com/KroneckerProduct.html">Kronecker Product in MathWorld</a></li>
|
Chris@49
|
7567 </ul>
|
Chris@49
|
7568 </li>
|
Chris@49
|
7569 </ul>
|
Chris@49
|
7570 <br>
|
Chris@49
|
7571 <hr class="greyline"><br>
|
Chris@49
|
7572
|
Chris@49
|
7573 <a name="reshape"></a>
|
Chris@49
|
7574 <b>reshape(mat, n_rows, n_cols, dim=0)</b>
|
Chris@49
|
7575 <br><b>reshape(cube, n_rows, n_cols, n_slices, dim=0)</b>
|
Chris@49
|
7576 <ul>
|
Chris@49
|
7577 <li>
|
Chris@49
|
7578 Generate a matrix/cube sized according to given size specifications,
|
Chris@49
|
7579 whose elements are taken from the given matrix/cube, either column-wise (dim=0) or row-wise (dim=1);
|
Chris@49
|
7580 the elements in the generated object are placed column-wise (ie. the first column is filled up before filling the second column)
|
Chris@49
|
7581 </li>
|
Chris@49
|
7582 <br>
|
Chris@49
|
7583 <li>
|
Chris@49
|
7584 The layout of the elements in the generated object will be different to the layout in the given object
|
Chris@49
|
7585 </li>
|
Chris@49
|
7586 <br>
|
Chris@49
|
7587 <li>
|
Chris@49
|
7588 This function can be used to create a vector representation of a matrix (ie. concatenate all the columns or rows)
|
Chris@49
|
7589 </li>
|
Chris@49
|
7590 <br>
|
Chris@49
|
7591 <li>
|
Chris@49
|
7592 The total number of elements in the generated matrix/cube doesn't have to be the same as the total number of elements in the given matrix/cube
|
Chris@49
|
7593 </li>
|
Chris@49
|
7594 <br>
|
Chris@49
|
7595 <li>
|
Chris@49
|
7596 If the total number of elements in the given matrix/cube is less than the specified size,
|
Chris@49
|
7597 the remaining elements in the generated matrix/cube are set to zero
|
Chris@49
|
7598 </li>
|
Chris@49
|
7599 <br>
|
Chris@49
|
7600 <li>
|
Chris@49
|
7601 If the total number of elements in the given matrix/cube is greater than the specified size,
|
Chris@49
|
7602 only a subset of elements is taken from the given matrix/cube
|
Chris@49
|
7603 </li>
|
Chris@49
|
7604 <br>
|
Chris@49
|
7605 <li>
|
Chris@49
|
7606 <b>Caveat:</b>
|
Chris@49
|
7607 reshape() is slower than <a href="#set_size">.set_size()</a>, which doesn't preserve data
|
Chris@49
|
7608 </li>
|
Chris@49
|
7609 <br>
|
Chris@49
|
7610 <li>
|
Chris@49
|
7611 <b>Caveat:</b>
|
Chris@49
|
7612 if you wish to grow/shrink a matrix while preserving the elements <b>as well as</b> the layout of the elements,
|
Chris@49
|
7613 use <a href="#resize">resize()</a> instead
|
Chris@49
|
7614 </li>
|
Chris@49
|
7615 <br>
|
Chris@49
|
7616 <li>
|
Chris@49
|
7617 Examples:
|
Chris@49
|
7618 <ul>
|
Chris@49
|
7619 <pre>
|
Chris@49
|
7620 mat A = randu<mat>(10, 5);
|
Chris@49
|
7621 mat B = reshape(A, 5, 10);
|
Chris@49
|
7622 </pre>
|
Chris@49
|
7623 </ul>
|
Chris@49
|
7624 </li>
|
Chris@49
|
7625 <br>
|
Chris@49
|
7626 <li>
|
Chris@49
|
7627 See also:
|
Chris@49
|
7628 <ul>
|
Chris@49
|
7629 <li><a href="#reshape_member">.reshape()</a> (member function of Mat and Cube)</li>
|
Chris@49
|
7630 <li><a href="#set_size">.set_size()</a> (member function of Mat and Cube)</li>
|
Chris@49
|
7631 <li><a href="#resize">resize()</a></li>
|
Chris@49
|
7632 <li><a href="#as_scalar">as_scalar()</a></li>
|
Chris@49
|
7633 <li><a href="#conv_to">conv_to()</a></li>
|
Chris@49
|
7634 <li><a href="#diagmat">diagmat()</a></li>
|
Chris@49
|
7635 </ul>
|
Chris@49
|
7636 </li>
|
Chris@49
|
7637 <br>
|
Chris@49
|
7638 </ul>
|
Chris@49
|
7639 <hr class="greyline"><br>
|
Chris@49
|
7640
|
Chris@49
|
7641 <a name="resize"></a>
|
Chris@49
|
7642 <b>resize(mat, n_rows, n_cols)</b>
|
Chris@49
|
7643 <br><b>resize(cube, n_rows, n_cols, n_slices)</b>
|
Chris@49
|
7644 <ul>
|
Chris@49
|
7645 <li>
|
Chris@49
|
7646 Generate a matrix/cube sized according to given size specifications,
|
Chris@49
|
7647 whose elements as well as the layout of the elements are taken from the given matrix/cube
|
Chris@49
|
7648 </li>
|
Chris@49
|
7649 <br>
|
Chris@49
|
7650 <li>
|
Chris@49
|
7651 <b>Caveat:</b>
|
Chris@49
|
7652 resize() is slower than <a href="#set_size">.set_size()</a>, which doesn't preserve data
|
Chris@49
|
7653 </li>
|
Chris@49
|
7654 <br>
|
Chris@49
|
7655 <li>
|
Chris@49
|
7656 Examples:
|
Chris@49
|
7657 <ul>
|
Chris@49
|
7658 <pre>
|
Chris@49
|
7659 mat A = randu<mat>(4, 5);
|
Chris@49
|
7660 mat B = resize(A, 7, 6);
|
Chris@49
|
7661 </pre>
|
Chris@49
|
7662 </ul>
|
Chris@49
|
7663 </li>
|
Chris@49
|
7664 <br>
|
Chris@49
|
7665 <li>
|
Chris@49
|
7666 This function was added in version 2.4
|
Chris@49
|
7667 </li>
|
Chris@49
|
7668 <br>
|
Chris@49
|
7669 <li>
|
Chris@49
|
7670 See also:
|
Chris@49
|
7671 <ul>
|
Chris@49
|
7672 <li><a href="#resize_member">.resize()</a> (member function of Mat and Cube)</li>
|
Chris@49
|
7673 <li><a href="#set_size">.set_size()</a> (member function of Mat and Cube)</li>
|
Chris@49
|
7674 <li><a href="#reshape">reshape()</a></li>
|
Chris@49
|
7675 <li><a href="#as_scalar">as_scalar()</a></li>
|
Chris@49
|
7676 <li><a href="#conv_to">conv_to()</a></li>
|
Chris@49
|
7677 </ul>
|
Chris@49
|
7678 </li>
|
Chris@49
|
7679 <br>
|
Chris@49
|
7680 </ul>
|
Chris@49
|
7681 <hr class="greyline"><br>
|
Chris@49
|
7682
|
Chris@49
|
7683 <a name="shuffle"></a>
|
Chris@49
|
7684 <b>shuffle(mat, dim=0)</b>
|
Chris@49
|
7685 <br><b>shuffle(rowvec, dim=0)</b>
|
Chris@49
|
7686 <br><b>shuffle(colvec, dim=0)</b>
|
Chris@49
|
7687 <ul>
|
Chris@49
|
7688 <li>
|
Chris@49
|
7689 Shuffle the rows (dim=0) or columns (dim=1) of a matrix or vector
|
Chris@49
|
7690 </li>
|
Chris@49
|
7691 <br>
|
Chris@49
|
7692 <li>
|
Chris@49
|
7693 Examples:
|
Chris@49
|
7694 <ul>
|
Chris@49
|
7695 <pre>
|
Chris@49
|
7696 mat A = randu<mat>(4,5);
|
Chris@49
|
7697 mat B = shuffle(A);
|
Chris@49
|
7698 </pre>
|
Chris@49
|
7699 </ul>
|
Chris@49
|
7700 </li>
|
Chris@49
|
7701 <br>
|
Chris@49
|
7702 <li>
|
Chris@49
|
7703 See also:
|
Chris@49
|
7704 <ul>
|
Chris@49
|
7705 <li><a href="#randu_randn_standalone">randu() / randn()</a></li>
|
Chris@49
|
7706 <li><a href="#sort">sort()</a></li>
|
Chris@49
|
7707 </ul>
|
Chris@49
|
7708 </li>
|
Chris@49
|
7709 <br>
|
Chris@49
|
7710 </ul>
|
Chris@49
|
7711 <hr class="greyline"><br>
|
Chris@49
|
7712
|
Chris@49
|
7713 <a name="sort"></a>
|
Chris@49
|
7714 <b>sort(mat, sort_type=0, dim=0)</b>
|
Chris@49
|
7715 <br><b>sort(rowvec, sort_type=0)</b>
|
Chris@49
|
7716 <br><b>sort(colvec, sort_type=0)</b>
|
Chris@49
|
7717 <ul>
|
Chris@49
|
7718 <li>For a matrix argument, return a matrix with the elements of the input matrix sorted in each column (<i>dim=0</i>), or each row (<i>dim=1</i>)</li>
|
Chris@49
|
7719 <br>
|
Chris@49
|
7720 <li><i>sort_type=0</i> (default) indicates an ascending sort</li>
|
Chris@49
|
7721 <br>
|
Chris@49
|
7722 <li><i>sort_type=1</i> indicates a descending sort</li>
|
Chris@49
|
7723 <br>
|
Chris@49
|
7724 <li>For a vector argument, return a vector which is a sorted version of the input vector</li>
|
Chris@49
|
7725 <br>
|
Chris@49
|
7726 <li>For matrices and vectors with complex numbers, sorting is via absolute values</li>
|
Chris@49
|
7727 <br>
|
Chris@49
|
7728 <li>
|
Chris@49
|
7729 Examples:
|
Chris@49
|
7730 <ul>
|
Chris@49
|
7731 <pre>
|
Chris@49
|
7732 mat A = randu<mat>(10,10);
|
Chris@49
|
7733 mat B = sort(A);
|
Chris@49
|
7734 </pre>
|
Chris@49
|
7735 </ul>
|
Chris@49
|
7736 </li>
|
Chris@49
|
7737 <li>
|
Chris@49
|
7738 See also:
|
Chris@49
|
7739 <ul>
|
Chris@49
|
7740 <li><a href="#sort_index">sort_index()</a></li>
|
Chris@49
|
7741 <li><a href="#shuffle">shuffle()</a></li>
|
Chris@49
|
7742 <li><a href="#randu_randn_standalone">randu() / randn()</a></li>
|
Chris@49
|
7743 </ul>
|
Chris@49
|
7744 </li>
|
Chris@49
|
7745 <br>
|
Chris@49
|
7746 </ul>
|
Chris@49
|
7747 <hr class="greyline"><br>
|
Chris@49
|
7748
|
Chris@49
|
7749 <a name="sort_index"></a>
|
Chris@49
|
7750 <b>sort_index(colvec, sort_type=0)</b>
|
Chris@49
|
7751 <br><b>sort_index(rowvec, sort_type=0)</b>
|
Chris@49
|
7752 <br>
|
Chris@49
|
7753 <br><b>stable_sort_index(colvec, sort_type=0)</b>
|
Chris@49
|
7754 <br><b>stable_sort_index(rowvec, sort_type=0)</b>
|
Chris@49
|
7755 <ul>
|
Chris@49
|
7756 <li>Return a vector which describes the sorted order of the given vector's elements
|
Chris@49
|
7757 (ie. it contains the indices of the given vector's elements)
|
Chris@49
|
7758 </li>
|
Chris@49
|
7759 <br>
|
Chris@49
|
7760 <li>The output vector must have the type <a href="#Col">uvec</a> or <a href="#Mat">umat</a>
|
Chris@49
|
7761 (ie. the indices are stored as unsigned integers of type <a href="#uword">uword</a>)
|
Chris@49
|
7762 </li>
|
Chris@49
|
7763 <br>
|
Chris@49
|
7764 <li><i>sort_type=0</i> (default) indicates an ascending sort</li>
|
Chris@49
|
7765 <br>
|
Chris@49
|
7766 <li><i>sort_type=1</i> indicates a descending sort</li>
|
Chris@49
|
7767 <br>
|
Chris@49
|
7768 <li>The <i>stable_sort_index()</i> variant preserves the relative order of elements with equivalent values; the variant was added in version 3.6</li>
|
Chris@49
|
7769 <br>
|
Chris@49
|
7770 <li>
|
Chris@49
|
7771 Examples:
|
Chris@49
|
7772 <ul>
|
Chris@49
|
7773 <pre>
|
Chris@49
|
7774 vec q = randu<vec>(10);
|
Chris@49
|
7775 uvec indices = sort_index(q);
|
Chris@49
|
7776 </pre>
|
Chris@49
|
7777 </ul>
|
Chris@49
|
7778 </li>
|
Chris@49
|
7779 <br>
|
Chris@49
|
7780 <li>
|
Chris@49
|
7781 See also:
|
Chris@49
|
7782 <ul>
|
Chris@49
|
7783 <li><a href="#find">find()</a></li>
|
Chris@49
|
7784 <li><a href="#sort">sort()</a></li>
|
Chris@49
|
7785 </ul>
|
Chris@49
|
7786 </li>
|
Chris@49
|
7787 <br>
|
Chris@49
|
7788 </ul>
|
Chris@49
|
7789 <hr class="greyline"><br>
|
Chris@49
|
7790
|
Chris@49
|
7791 <a name="symmat"></a>
|
Chris@49
|
7792 <b>symmatu(A)</b>
|
Chris@49
|
7793 <br><b>symmatl(A)</b>
|
Chris@49
|
7794 <ul>
|
Chris@49
|
7795 <li>
|
Chris@49
|
7796 <i>symmatu(A)</i>: interpret square matrix <i>A</i> as symmetric, reflecting the upper triangle to the lower triangle
|
Chris@49
|
7797 </li>
|
Chris@49
|
7798 <br>
|
Chris@49
|
7799 <li>
|
Chris@49
|
7800 <i>symmatl(A)</i>: interpret square matrix <i>A</i> as symmetric, reflecting the lower triangle to the upper triangle
|
Chris@49
|
7801 </li>
|
Chris@49
|
7802 <br>
|
Chris@49
|
7803 <li>
|
Chris@49
|
7804 If <i>A</i> is non-square, a <i>std::logic_error</i> exception is thrown
|
Chris@49
|
7805 </li>
|
Chris@49
|
7806 <br>
|
Chris@49
|
7807 <li>
|
Chris@49
|
7808 Examples:
|
Chris@49
|
7809 <ul>
|
Chris@49
|
7810 <pre>
|
Chris@49
|
7811 mat A = randu<mat>(5,5);
|
Chris@49
|
7812
|
Chris@49
|
7813 mat B = symmatu(A);
|
Chris@49
|
7814 mat C = symmatl(A);
|
Chris@49
|
7815 </pre>
|
Chris@49
|
7816 </ul>
|
Chris@49
|
7817 </li>
|
Chris@49
|
7818 <br>
|
Chris@49
|
7819 <li>See also:
|
Chris@49
|
7820 <ul>
|
Chris@49
|
7821 <li><a href="#diagmat">diagmat()</a></li>
|
Chris@49
|
7822 <li><a href="#trimat">trimatu() / trimatl()</a></li>
|
Chris@49
|
7823 <li><a href="http://en.wikipedia.org/wiki/Symmetric_matrix">Symmetric matrix in Wikipedia</a></li>
|
Chris@49
|
7824 </ul>
|
Chris@49
|
7825 </li>
|
Chris@49
|
7826 </ul>
|
Chris@49
|
7827 <br>
|
Chris@49
|
7828 <hr class="greyline"><br>
|
Chris@49
|
7829
|
Chris@49
|
7830 <a name="strans"></a>
|
Chris@49
|
7831 <b>strans(mat)</b>
|
Chris@49
|
7832 <br><b>strans(colvec)</b>
|
Chris@49
|
7833 <br><b>strans(rowvec)</b>
|
Chris@49
|
7834 <ul>
|
Chris@49
|
7835 <li>
|
Chris@49
|
7836 Simple matrix transpose, without taking the conjugate of the elements (complex matrices)
|
Chris@49
|
7837 </li>
|
Chris@49
|
7838 <br>
|
Chris@49
|
7839 <li>
|
Chris@49
|
7840 Use <a href="#trans">trans()</a> instead, unless you explicitly need to take the transpose of a complex matrix without taking the conjugate of the elements
|
Chris@49
|
7841 </li>
|
Chris@49
|
7842 <br>
|
Chris@49
|
7843 <li>See also:
|
Chris@49
|
7844 <ul>
|
Chris@49
|
7845 <li><a href="#t_st_members">.st()</a></li>
|
Chris@49
|
7846 <li><a href="#trans">trans()</a></li>
|
Chris@49
|
7847 </ul>
|
Chris@49
|
7848 </li>
|
Chris@49
|
7849 </ul>
|
Chris@49
|
7850 <br>
|
Chris@49
|
7851 <hr class="greyline"><br>
|
Chris@49
|
7852
|
Chris@49
|
7853
|
Chris@49
|
7854 <a name="trans"></a>
|
Chris@49
|
7855 <b>trans(mat)</b>
|
Chris@49
|
7856 <br><b>trans(colvec)</b>
|
Chris@49
|
7857 <br><b>trans(rowvec)</b>
|
Chris@49
|
7858 <ul>
|
Chris@49
|
7859 <li>
|
Chris@49
|
7860 Matrix transpose / Hermitian transpose
|
Chris@49
|
7861 </li>
|
Chris@49
|
7862 <br>
|
Chris@49
|
7863 <li>
|
Chris@49
|
7864 If a given object has real elements, a normal transpose is done
|
Chris@49
|
7865 </li>
|
Chris@49
|
7866 <br>
|
Chris@49
|
7867 <li>
|
Chris@49
|
7868 If a given object has complex elements, a Hermitian transpose is done (ie. the conjugate of the elements is taken during the transpose operation)
|
Chris@49
|
7869 </li>
|
Chris@49
|
7870 <br>
|
Chris@49
|
7871 <li>
|
Chris@49
|
7872 <b>Caveat:</b> for complex matrices, the functionality of trans() has changed in version 2.0:
|
Chris@49
|
7873 <ul>
|
Chris@49
|
7874 <li>in version 1.x, <i>trans()</i> does not take the conjugate of complex elements</li>
|
Chris@49
|
7875 <li>in version 1.x, the <i>htrans()</i> function is used for the Hermitian transpose</li>
|
Chris@49
|
7876 </ul>
|
Chris@49
|
7877 </li>
|
Chris@49
|
7878 <br>
|
Chris@49
|
7879 <li>
|
Chris@49
|
7880 Examples:
|
Chris@49
|
7881 <ul>
|
Chris@49
|
7882 <pre>mat A = randu<mat>(5,10);
|
Chris@49
|
7883 mat B = trans(A);
|
Chris@49
|
7884 </pre>
|
Chris@49
|
7885 </ul>
|
Chris@49
|
7886 </li>
|
Chris@49
|
7887 <br>
|
Chris@49
|
7888 <li>See also:
|
Chris@49
|
7889 <ul>
|
Chris@49
|
7890 <li><a href="#t_st_members">.t()</a></li>
|
Chris@49
|
7891 <li><a href="#strans">strans()</a></li>
|
Chris@49
|
7892 </ul>
|
Chris@49
|
7893 </li>
|
Chris@49
|
7894 </ul>
|
Chris@49
|
7895 <br>
|
Chris@49
|
7896 <hr class="greyline"><br>
|
Chris@49
|
7897
|
Chris@49
|
7898
|
Chris@49
|
7899 <a name="trimat"></a>
|
Chris@49
|
7900 <b>trimatu(A)</b>
|
Chris@49
|
7901 <br><b>trimatl(A)</b>
|
Chris@49
|
7902 <ul>
|
Chris@49
|
7903 <li>
|
Chris@49
|
7904 <i>trimatu(A)</i>: interpret square matrix <i>A</i> as upper triangular
|
Chris@49
|
7905 </li>
|
Chris@49
|
7906 <br>
|
Chris@49
|
7907 <li>
|
Chris@49
|
7908 <i>trimatl(A)</i>: interpret square matrix <i>A</i> as lower triangular
|
Chris@49
|
7909 </li>
|
Chris@49
|
7910 <br>
|
Chris@49
|
7911 <li>
|
Chris@49
|
7912 A <i>std::logic_error</i> exception is thrown if <i>A</i> is non-square
|
Chris@49
|
7913 </li>
|
Chris@49
|
7914 <br>
|
Chris@49
|
7915 <li>
|
Chris@49
|
7916 Examples:
|
Chris@49
|
7917 <ul>
|
Chris@49
|
7918 <pre>mat A = randu<mat>(5,5);
|
Chris@49
|
7919 mat U = trimatu(A);
|
Chris@49
|
7920 mat L = trimatl(A);
|
Chris@49
|
7921
|
Chris@49
|
7922 // tell the inv() function to look only
|
Chris@49
|
7923 // at the upper triangular part
|
Chris@49
|
7924 mat X = inv( trimatu(U) );
|
Chris@49
|
7925 </pre>
|
Chris@49
|
7926 </ul>
|
Chris@49
|
7927 </li>
|
Chris@49
|
7928 <br>
|
Chris@49
|
7929 <li>See also:
|
Chris@49
|
7930 <ul>
|
Chris@49
|
7931 <li><a href="#symmat">symmatu() / symmatl()</a></li>
|
Chris@49
|
7932 <li><a href="#diagmat">diagmat()</a></li>
|
Chris@49
|
7933 <li><a href="#inv">inv()</a></li>
|
Chris@49
|
7934 <li><a href="#solve">solve()</a></li>
|
Chris@49
|
7935 <li><a href="http://mathworld.wolfram.com/TriangularMatrix.html">Triangular matrix in MathWorld</a></li>
|
Chris@49
|
7936 <li><a href="http://en.wikipedia.org/wiki/Triangular_matrix">Triangular matrix in Wikipedia</a></li>
|
Chris@49
|
7937 </ul>
|
Chris@49
|
7938 </li>
|
Chris@49
|
7939 </ul>
|
Chris@49
|
7940 <br>
|
Chris@49
|
7941 <hr class="greyline">
|
Chris@49
|
7942 <br>
|
Chris@49
|
7943
|
Chris@49
|
7944
|
Chris@49
|
7945 <a name="unique"></a>
|
Chris@49
|
7946 <b>unique(A)</b>
|
Chris@49
|
7947 <br>
|
Chris@49
|
7948 <ul>
|
Chris@49
|
7949 <li>
|
Chris@49
|
7950 Return the unique elements of <i>A</i>, sorted in ascending order
|
Chris@49
|
7951 </li>
|
Chris@49
|
7952 <br>
|
Chris@49
|
7953 <li>
|
Chris@49
|
7954 If <i>A</i> is a vector, the output is also a vector with the same orientation (row or column) as <i>A</i>;
|
Chris@49
|
7955 if <i>A</i> is a matrix, the output is always a column vector
|
Chris@49
|
7956 </li>
|
Chris@49
|
7957 <br>
|
Chris@49
|
7958 <li>
|
Chris@49
|
7959 This function was added in version 3.2
|
Chris@49
|
7960 </li>
|
Chris@49
|
7961 <br>
|
Chris@49
|
7962 <li>
|
Chris@49
|
7963 Examples:
|
Chris@49
|
7964 <ul>
|
Chris@49
|
7965 <pre>
|
Chris@49
|
7966 mat X;
|
Chris@49
|
7967 X << 1 << 2 << endr
|
Chris@49
|
7968 << 2 << 3 << endr;
|
Chris@49
|
7969
|
Chris@49
|
7970 mat Y = unique(X);
|
Chris@49
|
7971 </pre>
|
Chris@49
|
7972 </ul>
|
Chris@49
|
7973 </li>
|
Chris@49
|
7974 <br>
|
Chris@49
|
7975 <li>See also:
|
Chris@49
|
7976 <ul>
|
Chris@49
|
7977 <li><a href="#find">find()</a></li>
|
Chris@49
|
7978 <li><a href="#sort">sort()</a></li>
|
Chris@49
|
7979 </ul>
|
Chris@49
|
7980 </li>
|
Chris@49
|
7981 </ul>
|
Chris@49
|
7982 <br>
|
Chris@49
|
7983 <hr class="greyline">
|
Chris@49
|
7984
|
Chris@49
|
7985
|
Chris@49
|
7986 <hr class="greyline">
|
Chris@49
|
7987 <br>
|
Chris@49
|
7988 <br>
|
Chris@49
|
7989 <font size=+1><b>Decompositions, Factorisations, Inverses and Equation Solvers</b></font>
|
Chris@49
|
7990 <br>
|
Chris@49
|
7991 <br>
|
Chris@49
|
7992 <hr class="greyline">
|
Chris@49
|
7993 <br>
|
Chris@49
|
7994
|
Chris@49
|
7995 <a name="chol"></a>
|
Chris@49
|
7996 <b>R = chol(X)</b>
|
Chris@49
|
7997 <br><b>chol(R, X)</b>
|
Chris@49
|
7998 <ul>
|
Chris@49
|
7999 <li>
|
Chris@49
|
8000 Cholesky decomposition of <i>X</i>, such that <i>R.t()*R = X</i>
|
Chris@49
|
8001 </li>
|
Chris@49
|
8002 <br>
|
Chris@49
|
8003 <li>
|
Chris@49
|
8004 X must be a symmetric, positive-definite matrix
|
Chris@49
|
8005 </li>
|
Chris@49
|
8006 <br>
|
Chris@49
|
8007 <li>If the decomposition fails, <i>R</i> is reset and:
|
Chris@49
|
8008 <ul>
|
Chris@49
|
8009 <li><i>chol(X)</i> throws a <i>std::runtime_error</i> exception</li>
|
Chris@49
|
8010 <li><i>chol(R,X)</i> returns a bool set to <i>false</i></li>
|
Chris@49
|
8011 </ul>
|
Chris@49
|
8012 </li>
|
Chris@49
|
8013 <br>
|
Chris@49
|
8014 <li>
|
Chris@49
|
8015 Examples:
|
Chris@49
|
8016 <ul>
|
Chris@49
|
8017 <pre>
|
Chris@49
|
8018 mat X = randu<mat>(5,5);
|
Chris@49
|
8019 mat Y = X.t()*X;
|
Chris@49
|
8020
|
Chris@49
|
8021 mat R = chol(Y);
|
Chris@49
|
8022 </pre>
|
Chris@49
|
8023 </ul>
|
Chris@49
|
8024 </li>
|
Chris@49
|
8025 <br>
|
Chris@49
|
8026 <li>
|
Chris@49
|
8027 See also:
|
Chris@49
|
8028 <ul>
|
Chris@49
|
8029 <li><a href="http://mathworld.wolfram.com/CholeskyDecomposition.html">Cholesky decomposition in MathWorld</a></li>
|
Chris@49
|
8030 <li><a href="http://en.wikipedia.org/wiki/Cholesky_decomposition">Cholesky decomposition in Wikipedia</a></li>
|
Chris@49
|
8031 </ul>
|
Chris@49
|
8032 </li>
|
Chris@49
|
8033 </ul>
|
Chris@49
|
8034 <br>
|
Chris@49
|
8035 <hr class="greyline"><br>
|
Chris@49
|
8036
|
Chris@49
|
8037 <a name="eig_sym"></a>
|
Chris@49
|
8038 <b>vec eigval = eig_sym(mat X)</b>
|
Chris@49
|
8039 <br><b>vec eigval = eig_sym(cx_mat X)</b>
|
Chris@49
|
8040 <br>
|
Chris@49
|
8041 <br><b>eig_sym(vec eigval, mat X)</b>
|
Chris@49
|
8042 <br><b>eig_sym(vec eigval, cx_mat X)</b>
|
Chris@49
|
8043 <br>
|
Chris@49
|
8044 <br><b>eig_sym(vec eigval, mat eigvec, mat X, method = "standard")</b>
|
Chris@49
|
8045 <br><b>eig_sym(vec eigval, cx_mat eigvec, cx_mat X, method = "standard")</b>
|
Chris@49
|
8046 <ul>
|
Chris@49
|
8047 <li>Eigen decomposition of symmetric/hermitian matrix <i>X</i></li>
|
Chris@49
|
8048 <br>
|
Chris@49
|
8049 <li>The eigenvalues and corresponding eigenvectors are stored in <i>eigval</i> and <i>eigvec</i>, respectively</li>
|
Chris@49
|
8050 <br>
|
Chris@49
|
8051 <li>The eigenvalues are in ascending order</li>
|
Chris@49
|
8052 <br>
|
Chris@49
|
8053 <li>If <i>X</i> is not square, a <i>std::logic_error</i> exception is thrown</li>
|
Chris@49
|
8054 <br>
|
Chris@49
|
8055 <li>The <i>method</i> argument is optional</li>
|
Chris@49
|
8056 <br>
|
Chris@49
|
8057 <li>
|
Chris@49
|
8058 By default, a standard eigen decomposition algorithm is used;
|
Chris@49
|
8059 a divide-and-conquer algorithm can be used instead by explicitly setting <i>method</i> to <i>"dc"</i>
|
Chris@49
|
8060 </li>
|
Chris@49
|
8061 <br>
|
Chris@49
|
8062 <li>
|
Chris@49
|
8063 The divide-and-conquer algorithm provides slightly different results, but is notably faster for large matrices
|
Chris@49
|
8064 </li>
|
Chris@49
|
8065 <br>
|
Chris@49
|
8066 <li>If the decomposition fails, the output objects are reset and:
|
Chris@49
|
8067 <ul>
|
Chris@49
|
8068 <li><i>eig_sym(X)</i> throws a <i>std::runtime_error</i> exception</li>
|
Chris@49
|
8069 <li><i>eig_sym(eigval, X)</i> and <i>eig_sym(eigval, eigvec, X)</i> return a bool set to <i>false</i></li>
|
Chris@49
|
8070 </ul>
|
Chris@49
|
8071 </li>
|
Chris@49
|
8072 <br>
|
Chris@49
|
8073 <li>There is currently no check whether <i>X</i> is symmetric</li>
|
Chris@49
|
8074 <br>
|
Chris@49
|
8075 <li>
|
Chris@49
|
8076 Examples:
|
Chris@49
|
8077 <ul>
|
Chris@49
|
8078 <pre>
|
Chris@49
|
8079 mat A = randu<mat>(50,50);
|
Chris@49
|
8080 mat B = A.t()*A; // generate a symmetric matrix
|
Chris@49
|
8081
|
Chris@49
|
8082 vec eigval;
|
Chris@49
|
8083 mat eigvec;
|
Chris@49
|
8084
|
Chris@49
|
8085 eig_sym(eigval, eigvec, B); // use standard algorithm by default
|
Chris@49
|
8086
|
Chris@49
|
8087 eig_sym(eigval, eigvec, B, "dc"); // use "divide & conquer" algorithm
|
Chris@49
|
8088 </pre>
|
Chris@49
|
8089 </ul>
|
Chris@49
|
8090 </li>
|
Chris@49
|
8091 <br>
|
Chris@49
|
8092 <li>
|
Chris@49
|
8093 See also:
|
Chris@49
|
8094 <ul>
|
Chris@49
|
8095 <li><a href="#eig_gen">eig_gen()</a></li>
|
Chris@49
|
8096 <li><a href="#svd">svd()</a></li>
|
Chris@49
|
8097 <li><a href="#svd_econ">svd_econ()</a></li>
|
Chris@49
|
8098 <li><a href="http://mathworld.wolfram.com/EigenDecomposition.html">eigen decomposition in MathWorld</a></li>
|
Chris@49
|
8099 <li><a href="http://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors">eigenvalues & eigenvectors in Wikipedia</a></li>
|
Chris@49
|
8100 <li><a href="http://en.wikipedia.org/wiki/Divide-and-conquer_eigenvalue_algorithm">divide & conquer eigenvalue algorithm in Wikipedia</a></li>
|
Chris@49
|
8101 </ul>
|
Chris@49
|
8102 </li>
|
Chris@49
|
8103 <br>
|
Chris@49
|
8104 </ul>
|
Chris@49
|
8105 <hr class="greyline"><br>
|
Chris@49
|
8106
|
Chris@49
|
8107 <a name="eig_gen"></a>
|
Chris@49
|
8108 <b>eig_gen(cx_vec eigval, cx_mat eigvec, mat X, side='r')</b>
|
Chris@49
|
8109 <br>
|
Chris@49
|
8110 <b>eig_gen(cx_vec eigval, cx_mat eigvec, cx_mat X, side='r')</b>
|
Chris@49
|
8111 <br>
|
Chris@49
|
8112 <br>
|
Chris@49
|
8113 <b>eig_gen(cx_vec eigval, mat l_eigvec, mat r_eigvec, mat X)</b>
|
Chris@49
|
8114 <br>
|
Chris@49
|
8115 <b>eig_gen(cx_vec eigval, cx_mat l_eigvec, cx_mat r_eigvec, cx_mat X)</b>
|
Chris@49
|
8116 <ul>
|
Chris@49
|
8117 <li>
|
Chris@49
|
8118 Eigen decomposition of general (non-symmetric/non-hermitian) square matrix <i>X</i></li>
|
Chris@49
|
8119 <br>
|
Chris@49
|
8120 <li>The eigenvalues and corresponding eigenvectors are stored in <i>eigval</i> and <i>eigvec</i>, respectively</li>
|
Chris@49
|
8121 <br>
|
Chris@49
|
8122 <li>
|
Chris@49
|
8123 For the first two forms, <i>side='r'</i> (default) specifies that right eigenvectors are computed,
|
Chris@49
|
8124 while <i>side='l'</i> specifies that left eigenvectors are computed
|
Chris@49
|
8125 </li>
|
Chris@49
|
8126 <br>
|
Chris@49
|
8127 <li>For the last two forms, both left and right eigenvectors are computed</li>
|
Chris@49
|
8128 <br>
|
Chris@49
|
8129 <li>
|
Chris@49
|
8130 The eigenvalues are not guaranteed to be ordered
|
Chris@49
|
8131 </li>
|
Chris@49
|
8132 <br>
|
Chris@49
|
8133 <li>If <i>X</i> is not square, a <i>std::logic_error</i> exception is thrown</li>
|
Chris@49
|
8134 <br>
|
Chris@49
|
8135 <li>If the decomposition fails, the output objects are reset and <i>eig_gen()</i> returns a bool set to <i>false</i></li>
|
Chris@49
|
8136 <br>
|
Chris@49
|
8137 <li>
|
Chris@49
|
8138 Examples:
|
Chris@49
|
8139 <ul>
|
Chris@49
|
8140 <pre>
|
Chris@49
|
8141 mat A = randu<mat>(10,10);
|
Chris@49
|
8142
|
Chris@49
|
8143 cx_vec eigval;
|
Chris@49
|
8144 cx_mat eigvec;
|
Chris@49
|
8145
|
Chris@49
|
8146 eig_gen(eigval, eigvec, A);
|
Chris@49
|
8147 </pre>
|
Chris@49
|
8148 </ul>
|
Chris@49
|
8149 </li>
|
Chris@49
|
8150 <br>
|
Chris@49
|
8151 <li>
|
Chris@49
|
8152 See also:
|
Chris@49
|
8153 <ul>
|
Chris@49
|
8154 <li><a href="#eig_sym">eig_sym()</a></li>
|
Chris@49
|
8155 <li><a href="#svd">svd()</a></li>
|
Chris@49
|
8156 <li><a href="#svd_econ">svd_econ()</a></li>
|
Chris@49
|
8157 <li><a href="http://mathworld.wolfram.com/EigenDecomposition.html">eigen decomposition in MathWorld</a></li>
|
Chris@49
|
8158 <li><a href="http://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors">eigenvalues & eigenvectors in Wikipedia</a></li>
|
Chris@49
|
8159 </ul>
|
Chris@49
|
8160 </li>
|
Chris@49
|
8161 </ul>
|
Chris@49
|
8162 <br>
|
Chris@49
|
8163 <hr class="greyline"><br>
|
Chris@49
|
8164
|
Chris@49
|
8165 <a name="fft"></a>
|
Chris@49
|
8166 <b>cx_mat Y = fft(X)</b><br>
|
Chris@49
|
8167 <b>cx_mat Y = fft(X, n)</b><br>
|
Chris@49
|
8168 <br>
|
Chris@49
|
8169 <b>cx_mat Z = ifft(cx_mat Y)</b><br>
|
Chris@49
|
8170 <b>cx_mat Z = ifft(cx_mat Y, n)</b><br>
|
Chris@49
|
8171 <ul>
|
Chris@49
|
8172 <li>fft(): fast Fourier transform of a vector or matrix (real or complex)</li>
|
Chris@49
|
8173 <br>
|
Chris@49
|
8174 <li>ifft(): inverse fast Fourier transform of a vector or matrix (complex only)</li>
|
Chris@49
|
8175 <br>
|
Chris@49
|
8176 <li>If given a matrix, the transform is done on each column vector of the matrix</li>
|
Chris@49
|
8177 <br>
|
Chris@49
|
8178 <li>
|
Chris@49
|
8179 The optional <i>n</i> argument specifies the transform length:
|
Chris@49
|
8180 <ul>
|
Chris@49
|
8181 <li>if <i>n</i> is larger than the length of the input vector, a zero-padded version of the vector is used</li>
|
Chris@49
|
8182 <li>if <i>n</i> is smaller than the length of the input vector, only the first <i>n</i> elements of the vector are used</li>
|
Chris@49
|
8183 </ul>
|
Chris@49
|
8184 </li>
|
Chris@49
|
8185 <br>
|
Chris@49
|
8186 <li>
|
Chris@49
|
8187 If <i>n</i> is not specified, the transform length is the same as the length of the input vector
|
Chris@49
|
8188 </li>
|
Chris@49
|
8189 <br>
|
Chris@49
|
8190 <li><b>Caveat:</b> the transform is fastest when the transform length is a power of 2, eg. 64, 128, 256, 512, 1024, ...</li>
|
Chris@49
|
8191 <br>
|
Chris@49
|
8192 <li>The implementation of the transform in this version is preliminary; it is not yet fully optimised</li>
|
Chris@49
|
8193 <br>
|
Chris@49
|
8194 <li>This function was added in version 3.810</li>
|
Chris@49
|
8195 <br>
|
Chris@49
|
8196 <li>
|
Chris@49
|
8197 Examples:
|
Chris@49
|
8198 <ul>
|
Chris@49
|
8199 <pre>
|
Chris@49
|
8200 vec X = randu<vec>(100);
|
Chris@49
|
8201 cx_vec Y = fft(X, 128);
|
Chris@49
|
8202 </pre>
|
Chris@49
|
8203 </ul>
|
Chris@49
|
8204 </li>
|
Chris@49
|
8205 <br>
|
Chris@49
|
8206 <li>
|
Chris@49
|
8207 See also:
|
Chris@49
|
8208 <ul>
|
Chris@49
|
8209 <li><a href="#conv">conv()</a></li>
|
Chris@49
|
8210 <li><a href="#imag_real">real()</a></li>
|
Chris@49
|
8211 <li><a href="http://mathworld.wolfram.com/FastFourierTransform.html">fast Fourier transform in MathWorld</a></li>
|
Chris@49
|
8212 <li><a href="http://en.wikipedia.org/wiki/Fast_Fourier_transform">fast Fourier transform in Wikipedia</a></li>
|
Chris@49
|
8213 </ul>
|
Chris@49
|
8214 </li>
|
Chris@49
|
8215 <br>
|
Chris@49
|
8216 </ul>
|
Chris@49
|
8217 <hr class="greyline"><br>
|
Chris@49
|
8218
|
Chris@49
|
8219 <a name="inv"></a>
|
Chris@49
|
8220 <b>B = inv(A, </b><i>slow=false</i><b>)</b>
|
Chris@49
|
8221 <br>
|
Chris@49
|
8222 <b>inv(B, A, </b><i>slow=false</i><b>)</b>
|
Chris@49
|
8223 <ul>
|
Chris@49
|
8224 <li>
|
Chris@49
|
8225 Inverse of square matrix <i>A</i>
|
Chris@49
|
8226 </li>
|
Chris@49
|
8227 <br>
|
Chris@49
|
8228 <li>the <i>slow</i> argument is optional</li>
|
Chris@49
|
8229 <br>
|
Chris@49
|
8230 <li>
|
Chris@49
|
8231 If <i>A</i> is known to be a triangular matrix,
|
Chris@49
|
8232 the inverse can be computed faster by explicitly marking the matrix as triangular
|
Chris@49
|
8233 through <a href="#trimat">trimatu()</a> or <a href="#trimat">trimatl()</a>
|
Chris@49
|
8234 </li>
|
Chris@49
|
8235 <br>
|
Chris@49
|
8236 <li>
|
Chris@49
|
8237 If <i>A</i> is known to be a positive-definite symmetric matrix,
|
Chris@49
|
8238 the inverse can be computed faster by explicitly marking the matrix using sympd()
|
Chris@49
|
8239 </li>
|
Chris@49
|
8240 <br>
|
Chris@49
|
8241 <li>
|
Chris@49
|
8242 If <i>A</i> is not square, a <i>std::logic_error</i> exception is thrown
|
Chris@49
|
8243 </li>
|
Chris@49
|
8244 <br>
|
Chris@49
|
8245 <li>If <i>A</i> appears to be singular, <i>B</i> is reset and:
|
Chris@49
|
8246 <ul>
|
Chris@49
|
8247 <li><i>inv(A)</i> throws a <i>std::runtime_error</i> exception</li>
|
Chris@49
|
8248 <li><i>inv(B,A)</i> returns a bool set to <i>false</i></li>
|
Chris@49
|
8249 </ul>
|
Chris@49
|
8250 </li>
|
Chris@49
|
8251 <br>
|
Chris@49
|
8252 <li>
|
Chris@49
|
8253 <b>NOTE:</b> in many cases it is more efficient/faster to use the <a href="#solve">solve()</a> function instead of performing a matrix inverse;
|
Chris@49
|
8254 for example, if you want to solve a system of linear equations, eg., <i>X = inv(A)*B</i>,
|
Chris@49
|
8255 use <a href="#solve">solve()</a> instead
|
Chris@49
|
8256 </li>
|
Chris@49
|
8257 <br>
|
Chris@49
|
8258 <li>
|
Chris@49
|
8259 For matrix sizes ≤ 4x4, a fast inverse algorithm is used by default.
|
Chris@49
|
8260 In rare instances, the fast algorithm might be less precise than the standard algorithm.
|
Chris@49
|
8261 To force the use of the standard algorithm, set the <i>slow</i> argument to <i>true</i>
|
Chris@49
|
8262 </li>
|
Chris@49
|
8263 <br>
|
Chris@49
|
8264 <li>
|
Chris@49
|
8265 Examples:
|
Chris@49
|
8266 <ul>
|
Chris@49
|
8267 <pre>
|
Chris@49
|
8268 mat A = randu<mat>(5,5);
|
Chris@49
|
8269 mat B = inv(A);
|
Chris@49
|
8270
|
Chris@49
|
8271
|
Chris@49
|
8272 // Diagonal elements in C are set to the
|
Chris@49
|
8273 // reciprocal of the corresponding elements in A.
|
Chris@49
|
8274 // Off-diagonal elements in C are set to zero.
|
Chris@49
|
8275 mat C = inv( diagmat(A) );
|
Chris@49
|
8276
|
Chris@49
|
8277
|
Chris@49
|
8278 // tell inv() to look only at the upper triangular part of A
|
Chris@49
|
8279 mat D = inv( trimatu(A) );
|
Chris@49
|
8280
|
Chris@49
|
8281
|
Chris@49
|
8282 // tell inv() that AA is a symmetric positive definite matrix
|
Chris@49
|
8283 mat AA = A*A.t();
|
Chris@49
|
8284 mat E = inv( sympd(AA) );
|
Chris@49
|
8285
|
Chris@49
|
8286
|
Chris@49
|
8287 mat44 F = randu<mat>(4,4);
|
Chris@49
|
8288
|
Chris@49
|
8289 mat G = inv(F); // use fast algorithm by default
|
Chris@49
|
8290 mat H = inv(F, true); // use slow algorithm
|
Chris@49
|
8291 </pre>
|
Chris@49
|
8292 </ul>
|
Chris@49
|
8293 </li>
|
Chris@49
|
8294 <br>
|
Chris@49
|
8295 <li>
|
Chris@49
|
8296 See also:
|
Chris@49
|
8297 <ul>
|
Chris@49
|
8298 <li><a href="#i_member">.i()</a>
|
Chris@49
|
8299 <li><a href="#pinv">pinv()</a>
|
Chris@49
|
8300 <li><a href="#solve">solve()</a></li>
|
Chris@49
|
8301 <li><a href="#trimat">trimatu() / trimatl()</a></li>
|
Chris@49
|
8302 <li><a href="http://mathworld.wolfram.com/MatrixInverse.html">matrix inverse in MathWorld</a></li>
|
Chris@49
|
8303 <li><a href="http://en.wikipedia.org/wiki/Invertible_matrix">invertible matrix in Wikipedia</a></li>
|
Chris@49
|
8304 </ul>
|
Chris@49
|
8305 </li>
|
Chris@49
|
8306 </ul>
|
Chris@49
|
8307 <br>
|
Chris@49
|
8308 <hr class="greyline"><br>
|
Chris@49
|
8309
|
Chris@49
|
8310
|
Chris@49
|
8311
|
Chris@49
|
8312 <a name="lu"></a>
|
Chris@49
|
8313 <b>lu(mat L, mat U, mat P, mat X)</b>
|
Chris@49
|
8314 <br>
|
Chris@49
|
8315 <b>lu(mat L, mat U, mat X)</b>
|
Chris@49
|
8316 <ul>
|
Chris@49
|
8317 <li>
|
Chris@49
|
8318 Lower-upper decomposition (with partial pivoting) of matrix <i>X</i>
|
Chris@49
|
8319 </li>
|
Chris@49
|
8320 <br>
|
Chris@49
|
8321 <li>
|
Chris@49
|
8322 The first form provides
|
Chris@49
|
8323 a lower-triangular matrix <i>L</i>,
|
Chris@49
|
8324 an upper-triangular matrix <i>U</i>,
|
Chris@49
|
8325 and a permutation matrix <i>P</i>,
|
Chris@49
|
8326 such that <i>P.t()*L*U = X</i>
|
Chris@49
|
8327 </li>
|
Chris@49
|
8328 <br>
|
Chris@49
|
8329 <li>
|
Chris@49
|
8330 The second form provides permuted <i>L</i> and <i>U</i>, such that <i>L*U = X</i>.
|
Chris@49
|
8331 Note that in this case <i>L</i> is generally not lower-triangular
|
Chris@49
|
8332 </li>
|
Chris@49
|
8333 <br>
|
Chris@49
|
8334 <li>
|
Chris@49
|
8335 If the decomposition fails, the output objects are reset and <i>lu()</i> returns a bool set to <i>false</i>
|
Chris@49
|
8336 </li>
|
Chris@49
|
8337 <br>
|
Chris@49
|
8338 <li>
|
Chris@49
|
8339 Examples:
|
Chris@49
|
8340 <ul>
|
Chris@49
|
8341 <pre>
|
Chris@49
|
8342 mat A = randu<mat>(5,5);
|
Chris@49
|
8343
|
Chris@49
|
8344 mat L, U, P;
|
Chris@49
|
8345
|
Chris@49
|
8346 lu(L, U, P, A);
|
Chris@49
|
8347
|
Chris@49
|
8348 mat B = P.t()*L*U;
|
Chris@49
|
8349 </pre>
|
Chris@49
|
8350 </ul>
|
Chris@49
|
8351 </li>
|
Chris@49
|
8352 <br>
|
Chris@49
|
8353 <li>
|
Chris@49
|
8354 See also:
|
Chris@49
|
8355 <ul>
|
Chris@49
|
8356 <li><a href="http://en.wikipedia.org/wiki/LU_decomposition">LU decomposition in Wikipedia</a></li>
|
Chris@49
|
8357 <li><a href="http://mathworld.wolfram.com/LUDecomposition.html">LU decomposition in MathWorld</a></li>
|
Chris@49
|
8358 </ul>
|
Chris@49
|
8359 </li>
|
Chris@49
|
8360 </ul>
|
Chris@49
|
8361 <br>
|
Chris@49
|
8362 <hr class="greyline"><br>
|
Chris@49
|
8363
|
Chris@49
|
8364 <a name="pinv"></a>
|
Chris@49
|
8365 <b>B = pinv(A, tolerance = default)</b>
|
Chris@49
|
8366 <br><b>pinv(B, A, tolerance = default)</b>
|
Chris@49
|
8367 <ul>
|
Chris@49
|
8368 <li>Moore-Penrose pseudo-inverse of matrix <i>A</i></li>
|
Chris@49
|
8369 <br>
|
Chris@49
|
8370 <li>The <i>tolerance</i> argument is optional</li>
|
Chris@49
|
8371 <br>
|
Chris@49
|
8372 <li>The computation is based on singular value decomposition;
|
Chris@49
|
8373 if the decomposition fails, <i>B</i> is reset and:
|
Chris@49
|
8374 <ul>
|
Chris@49
|
8375 <li><i>pinv(A)</i> throws a <i>std::runtime_error</i> exception</li>
|
Chris@49
|
8376 <li><i>pinv(B,A)</i> returns a bool set to <i>false</i></li>
|
Chris@49
|
8377 </ul>
|
Chris@49
|
8378 <br>
|
Chris@49
|
8379 <li>Any singular values less than <i>tolerance</i> are treated as zero</li>
|
Chris@49
|
8380 <br>
|
Chris@49
|
8381 <li>For matrix <i>A</i> with <i>m</i> rows and <i>n</i> columns,
|
Chris@49
|
8382 the default tolerance is <i>max(m,n)*norm(A)*datum::eps</i>,
|
Chris@49
|
8383 where <i>datum::eps</i> denotes the difference between 1 and the least value greater than 1 that is representable</li>
|
Chris@49
|
8384 <br>
|
Chris@49
|
8385 <li>
|
Chris@49
|
8386 Examples:
|
Chris@49
|
8387 <ul>
|
Chris@49
|
8388 <pre>
|
Chris@49
|
8389 mat A = randu<mat>(4,5);
|
Chris@49
|
8390 mat B = pinv(A);
|
Chris@49
|
8391 </pre>
|
Chris@49
|
8392 </ul>
|
Chris@49
|
8393 </li>
|
Chris@49
|
8394 <br>
|
Chris@49
|
8395 <li>
|
Chris@49
|
8396 See also:
|
Chris@49
|
8397 <ul>
|
Chris@49
|
8398 <li><a href="#i_member">.i()</a></li>
|
Chris@49
|
8399 <li><a href="#inv">inv()</a></li>
|
Chris@49
|
8400 <li><a href="#solve">solve()</a></li>
|
Chris@49
|
8401 <li><a href="#constants">datum::eps</a></li>
|
Chris@49
|
8402 <li><a href="http://mathworld.wolfram.com/Pseudoinverse.html">Pseudoinverse in MathWorld</a></li>
|
Chris@49
|
8403 <li><a href="http://mathworld.wolfram.com/Moore-PenroseMatrixInverse.html">Moore-Penrose Matrix Inverse in MathWorld</a></li>
|
Chris@49
|
8404 <li><a href="http://en.wikipedia.org/wiki/Moore-Penrose_pseudoinverse">Moore-Penrose pseudoinverse in Wikipedia</a></li>
|
Chris@49
|
8405 </ul>
|
Chris@49
|
8406 </li>
|
Chris@49
|
8407 </ul>
|
Chris@49
|
8408 <br>
|
Chris@49
|
8409 <hr class="greyline"><br>
|
Chris@49
|
8410
|
Chris@49
|
8411 <a name="princomp"></a>
|
Chris@49
|
8412 <b>mat coeff = princomp(mat X)</b>
|
Chris@49
|
8413 <br><b>cx_mat coeff = princomp(cx_mat X)</b><br>
|
Chris@49
|
8414
|
Chris@49
|
8415 <br><b>princomp(mat coeff, mat X)</b>
|
Chris@49
|
8416 <br><b>princomp(cx_mat coeff, cx_mat X)</b><br>
|
Chris@49
|
8417
|
Chris@49
|
8418 <br><b>princomp(mat coeff, mat score, mat X)</b>
|
Chris@49
|
8419 <br><b>princomp(cx_mat coeff, cx_mat score, cx_mat X)</b><br>
|
Chris@49
|
8420
|
Chris@49
|
8421 <br><b>princomp(mat coeff, mat score, vec latent, mat X)</b>
|
Chris@49
|
8422 <br><b>princomp(cx_mat coeff, cx_mat score, vec latent, cx_mat X)</b><br>
|
Chris@49
|
8423
|
Chris@49
|
8424 <br><b>princomp(mat coeff, mat score, vec latent, vec tsquared, mat X)</b>
|
Chris@49
|
8425 <br><b>princomp(cx_mat coeff, cx_mat score, vec latent, cx_vec tsquared, cx_mat X)</b><br>
|
Chris@49
|
8426 <br>
|
Chris@49
|
8427 <ul>
|
Chris@49
|
8428 <li>Principal component analysis of matrix <i>X</i></li><br>
|
Chris@49
|
8429 <li>Each row of <i>X</i> is an observation and each column is a variable</li><br>
|
Chris@49
|
8430 <li>output objects:
|
Chris@49
|
8431 <ul>
|
Chris@49
|
8432 <li><i>coeff</i>: principal component coefficients</li>
|
Chris@49
|
8433 <li><i>score</i>: projected data</li>
|
Chris@49
|
8434 <li><i>latent</i>: eigenvalues of the covariance matrix of <i>X</i></li>
|
Chris@49
|
8435 <li><i>tsquared</i>: Hotteling's statistic for each sample</li>
|
Chris@49
|
8436 </ul>
|
Chris@49
|
8437 </li>
|
Chris@49
|
8438 <br>
|
Chris@49
|
8439 <li>The computation is based on singular value decomposition;
|
Chris@49
|
8440 if the decomposition fails, the output objects are reset and:
|
Chris@49
|
8441 <ul>
|
Chris@49
|
8442 <li><i>princomp(X)</i> throws a <i>std::runtime_error</i> exception</li>
|
Chris@49
|
8443 <li>remaining forms of <i>princomp()</i> return a bool set to <i>false</i></li>
|
Chris@49
|
8444 </ul>
|
Chris@49
|
8445 </li>
|
Chris@49
|
8446 <br>
|
Chris@49
|
8447 <li>
|
Chris@49
|
8448 Examples:
|
Chris@49
|
8449 <ul>
|
Chris@49
|
8450 <pre>
|
Chris@49
|
8451 mat A = randu<mat>(5,4);
|
Chris@49
|
8452
|
Chris@49
|
8453 mat coeff;
|
Chris@49
|
8454 mat score;
|
Chris@49
|
8455 vec latent;
|
Chris@49
|
8456 vec tsquared;
|
Chris@49
|
8457
|
Chris@49
|
8458 princomp(coeff, score, latent, tsquared, A);
|
Chris@49
|
8459 </pre>
|
Chris@49
|
8460 </ul>
|
Chris@49
|
8461 </li>
|
Chris@49
|
8462 <br>
|
Chris@49
|
8463 <li>
|
Chris@49
|
8464 See also:
|
Chris@49
|
8465 <ul>
|
Chris@49
|
8466 <li><a href="http://en.wikipedia.org/wiki/Principal_component_analysis">principal components analysis in Wikipedia</a></li>
|
Chris@49
|
8467 <li><a href="http://mathworld.wolfram.com/PrincipalComponentAnalysis.html">principal components analysis in MathWorld</a></li>
|
Chris@49
|
8468 </ul>
|
Chris@49
|
8469 </li>
|
Chris@49
|
8470 <br>
|
Chris@49
|
8471 </ul>
|
Chris@49
|
8472 <hr class="greyline"><br>
|
Chris@49
|
8473
|
Chris@49
|
8474 <a name="qr"></a>
|
Chris@49
|
8475 <b>qr(Q,R,X)</b>
|
Chris@49
|
8476 <ul>
|
Chris@49
|
8477 <li>
|
Chris@49
|
8478 Decomposition of <i>X</i> into an orthogonal matrix <i>Q</i> and a right triangular matrix <i>R</i>, such that <i>Q*R = X</i>
|
Chris@49
|
8479 </li>
|
Chris@49
|
8480 <br>
|
Chris@49
|
8481 <li>
|
Chris@49
|
8482 If the decomposition fails, <i>Q</i> and <i>R</i> are reset and the function returns a bool set to <i>false</i>
|
Chris@49
|
8483 </li>
|
Chris@49
|
8484 <br>
|
Chris@49
|
8485 <li>
|
Chris@49
|
8486 Examples:
|
Chris@49
|
8487 <ul>
|
Chris@49
|
8488 <pre>
|
Chris@49
|
8489 mat X = randu<mat>(5,5);
|
Chris@49
|
8490 mat Q, R;
|
Chris@49
|
8491
|
Chris@49
|
8492 qr(Q,R,X);
|
Chris@49
|
8493 </pre>
|
Chris@49
|
8494 </ul>
|
Chris@49
|
8495 </li>
|
Chris@49
|
8496 <br>
|
Chris@49
|
8497 <li>
|
Chris@49
|
8498 See also:
|
Chris@49
|
8499 <ul>
|
Chris@49
|
8500 <li><a href="#qr_econ">qr_econ()</a></li>
|
Chris@49
|
8501 <li><a href="http://en.wikipedia.org/wiki/Orthogonal_matrix">Orthogonal matrix in Wikipedia</a></li>
|
Chris@49
|
8502 <li><a href="http://en.wikipedia.org/wiki/QR_decomposition">QR decomposition in Wikipedia</a></li>
|
Chris@49
|
8503 <li><a href="http://mathworld.wolfram.com/QRDecomposition.html">QR decomposition in MathWorld</a></li>
|
Chris@49
|
8504 <li><a href="http://octave.sourceforge.net/octave/function/qr.html">QR decomposition in Octave</a></li>
|
Chris@49
|
8505 </ul>
|
Chris@49
|
8506 </li>
|
Chris@49
|
8507 </ul>
|
Chris@49
|
8508 <br>
|
Chris@49
|
8509 <hr class="greyline"><br>
|
Chris@49
|
8510
|
Chris@49
|
8511 <a name="qr_econ"></a>
|
Chris@49
|
8512 <b>qr_econ(Q,R,X)</b>
|
Chris@49
|
8513 <ul>
|
Chris@49
|
8514 <li>
|
Chris@49
|
8515 Economical decomposition of <i>X</i> (with size <i>m</i> x <i>n</i>) into an orthogonal matrix <i>Q</i> and a right triangular matrix <i>R</i>, such that <i>Q*R = X</i>
|
Chris@49
|
8516 </li>
|
Chris@49
|
8517 <br>
|
Chris@49
|
8518 <li>
|
Chris@49
|
8519 If <i>m</i> > <i>n</i>, only the first <i>n</i> rows of <i>R</i> and the first <i>n</i> columns of <i>Q</i> are calculated
|
Chris@49
|
8520 (ie. the zero rows of <i>R</i> and the corresponding columns of <i>Q</i> are omitted)
|
Chris@49
|
8521 </li>
|
Chris@49
|
8522 <br>
|
Chris@49
|
8523 <li>
|
Chris@49
|
8524 If the decomposition fails, <i>Q</i> and <i>R</i> are reset and the function returns a bool set to <i>false</i>
|
Chris@49
|
8525 </li>
|
Chris@49
|
8526 <br>
|
Chris@49
|
8527 <li>
|
Chris@49
|
8528 This function was added in version 3.4
|
Chris@49
|
8529 </li>
|
Chris@49
|
8530 <br>
|
Chris@49
|
8531 <li>
|
Chris@49
|
8532 Examples:
|
Chris@49
|
8533 <ul>
|
Chris@49
|
8534 <pre>
|
Chris@49
|
8535 mat X = randu<mat>(6,5);
|
Chris@49
|
8536 mat Q, R;
|
Chris@49
|
8537
|
Chris@49
|
8538 qr_econ(Q,R,X);
|
Chris@49
|
8539 </pre>
|
Chris@49
|
8540 </ul>
|
Chris@49
|
8541 </li>
|
Chris@49
|
8542 <br>
|
Chris@49
|
8543 <li>
|
Chris@49
|
8544 See also:
|
Chris@49
|
8545 <ul>
|
Chris@49
|
8546 <li><a href="#qr">qr()</a></li>
|
Chris@49
|
8547 <li><a href="http://en.wikipedia.org/wiki/Orthogonal_matrix">Orthogonal matrix in Wikipedia</a></li>
|
Chris@49
|
8548 <li><a href="http://en.wikipedia.org/wiki/QR_decomposition">QR decomposition in Wikipedia</a></li>
|
Chris@49
|
8549 <li><a href="http://octave.sourceforge.net/octave/function/qr.html">QR decomposition in Octave</a></li>
|
Chris@49
|
8550 <li><a href="http://mathworld.wolfram.com/QRDecomposition.html">QR decomposition in MathWorld</a></li>
|
Chris@49
|
8551 </ul>
|
Chris@49
|
8552 </li>
|
Chris@49
|
8553 </ul>
|
Chris@49
|
8554 <br>
|
Chris@49
|
8555 <hr class="greyline"><br>
|
Chris@49
|
8556
|
Chris@49
|
8557 <a name="solve"></a>
|
Chris@49
|
8558 <b>X = solve(A, B, </b><i>slow=false</i><b>)</b>
|
Chris@49
|
8559 <br><b>solve(X, A, B, </b><i>slow=false</i><b>)</b>
|
Chris@49
|
8560 <ul>
|
Chris@49
|
8561 <li>Solve a system of linear equations, ie., <i>A*X = B</i>, where <i>X</i> is unknown</li>
|
Chris@49
|
8562 <br>
|
Chris@49
|
8563 <li>The <i>slow</i> argument is optional</li>
|
Chris@49
|
8564 <br>
|
Chris@49
|
8565 <li>For a square matrix <i>A</i>, this function is conceptually the same as <i>X = inv(A)*B</i>, but is more efficient</li>
|
Chris@49
|
8566 <br>
|
Chris@49
|
8567 <li>Similar functionality to the "\" (left division operator) operator in Matlab/Octave, ie. <i>X = A \ B</i></li>
|
Chris@49
|
8568 <br>
|
Chris@49
|
8569 <li>The number of rows in <i>A</i> and <i>B</i> must be the same</li>
|
Chris@49
|
8570 <br>
|
Chris@49
|
8571 <li>
|
Chris@49
|
8572 If <i>A</i> is known to be a triangular matrix,
|
Chris@49
|
8573 the solution can be computed faster by explicitly marking the matrix as triangular
|
Chris@49
|
8574 through <a href="#trimat">trimatu()</a> or <a href="#trimat">trimatl()</a>
|
Chris@49
|
8575 </li>
|
Chris@49
|
8576 <br>
|
Chris@49
|
8577 <li>
|
Chris@49
|
8578 If <i>A</i> is non-square (and hence also non-triangular),
|
Chris@49
|
8579 solve() will also try to provide approximate solutions to under-determined as well as over-determined systems</li>
|
Chris@49
|
8580 <br>
|
Chris@49
|
8581 <li>
|
Chris@49
|
8582 If no solution is found, <i>X</i> is reset and:
|
Chris@49
|
8583 <ul>
|
Chris@49
|
8584 <li><i>solve(A,B)</i> throws a <i>std::runtime_error</i> exception</li>
|
Chris@49
|
8585 <li><i>solve(X,A,B)</i> returns a bool set to <i>false</i></li>
|
Chris@49
|
8586 </ul>
|
Chris@49
|
8587 </li>
|
Chris@49
|
8588 <br>
|
Chris@49
|
8589 <li>
|
Chris@49
|
8590 For matrix sizes ≤ 4x4, a fast algorithm is used by default.
|
Chris@49
|
8591 In rare instances, the fast algorithm might be less precise than the standard algorithm.
|
Chris@49
|
8592 To force the use of the standard algorithm, set the <i>slow</i> argument to <i>true</i>
|
Chris@49
|
8593 </li>
|
Chris@49
|
8594 <br>
|
Chris@49
|
8595 <li>
|
Chris@49
|
8596 <b>NOTE:</b> Old versions of the ATLAS library (eg. 3.6) can corrupt memory and crash your program;
|
Chris@49
|
8597 the standard LAPACK library and later versions of ATLAS (eg. 3.8) work without problems
|
Chris@49
|
8598 </li>
|
Chris@49
|
8599 <br>
|
Chris@49
|
8600 <li>
|
Chris@49
|
8601 Examples:
|
Chris@49
|
8602 <ul>
|
Chris@49
|
8603 <pre>
|
Chris@49
|
8604 mat A = randu<mat>(5,5);
|
Chris@49
|
8605 vec b = randu<vec>(5);
|
Chris@49
|
8606 mat B = randu<mat>(5,5);
|
Chris@49
|
8607
|
Chris@49
|
8608 vec x = solve(A, b);
|
Chris@49
|
8609 mat X = solve(A, B);
|
Chris@49
|
8610
|
Chris@49
|
8611 vec x2;
|
Chris@49
|
8612 solve(x2, A, b);
|
Chris@49
|
8613
|
Chris@49
|
8614 // tell solve() to look only at the upper triangular part of A
|
Chris@49
|
8615 mat Y = solve( trimatu(A), B );
|
Chris@49
|
8616
|
Chris@49
|
8617
|
Chris@49
|
8618 mat44 C = randu<mat>(4,4);
|
Chris@49
|
8619 mat44 D = randu<mat>(4,4);
|
Chris@49
|
8620
|
Chris@49
|
8621 mat E = solve(C, D); // use fast algorithm by default
|
Chris@49
|
8622 mat F = solve(C, D, true); // use slow algorithm
|
Chris@49
|
8623
|
Chris@49
|
8624 </pre>
|
Chris@49
|
8625 </ul>
|
Chris@49
|
8626 </li>
|
Chris@49
|
8627 <br>
|
Chris@49
|
8628 <li>
|
Chris@49
|
8629 See also:
|
Chris@49
|
8630 <ul>
|
Chris@49
|
8631 <li><a href="#i_member">.i()</a></li>
|
Chris@49
|
8632 <li><a href="#inv">inv()</a></li>
|
Chris@49
|
8633 <li><a href="#pinv">pinv()</a></li>
|
Chris@49
|
8634 <li><a href="#syl">syl()</a></li>
|
Chris@49
|
8635 <li><a href="#trimat">trimatu() / trimatl()</a></li>
|
Chris@49
|
8636 <li><a href="http://mathworld.wolfram.com/LinearSystemofEquations.html">linear system of equations in MathWorld</a></li>
|
Chris@49
|
8637 <li><a href="http://en.wikipedia.org/wiki/Linear_system_of_equations">system of linear equations in Wikipedia</a></li>
|
Chris@49
|
8638 </ul>
|
Chris@49
|
8639 </li>
|
Chris@49
|
8640 <br>
|
Chris@49
|
8641 </ul>
|
Chris@49
|
8642 <hr class="greyline"><br>
|
Chris@49
|
8643
|
Chris@49
|
8644
|
Chris@49
|
8645 <a name="svd"></a>
|
Chris@49
|
8646 <b>vec s = svd(mat X)</b>
|
Chris@49
|
8647 <br><b>vec s = svd(cx_mat X)</b>
|
Chris@49
|
8648 <br>
|
Chris@49
|
8649 <br><b>svd(vec s, mat X)</b>,
|
Chris@49
|
8650 <br><b>svd(vec s, cx_mat X)</b>
|
Chris@49
|
8651 <br>
|
Chris@49
|
8652 <br><b>svd(mat U, vec s, mat V, mat X, method = "standard")</b>
|
Chris@49
|
8653 <br><b>svd(cx_mat U, vec s, cx_mat V, cx_mat X, method = "standard")</b>
|
Chris@49
|
8654 <ul>
|
Chris@49
|
8655 <li>
|
Chris@49
|
8656 The first four forms compute the singular values of <i>X</i>
|
Chris@49
|
8657 </li>
|
Chris@49
|
8658 <br>
|
Chris@49
|
8659 <li>
|
Chris@49
|
8660 The last two forms compute the full singular value decomposition of <i>X</i>
|
Chris@49
|
8661 </li>
|
Chris@49
|
8662 <br>
|
Chris@49
|
8663 <li>The <i>method</i> argument is optional</li>
|
Chris@49
|
8664 <br>
|
Chris@49
|
8665 <li>
|
Chris@49
|
8666 By default, a standard decomposition algorithm is used;
|
Chris@49
|
8667 a divide-and-conquer algorithm can be used instead by explicitly setting <i>method</i> to <i>"dc"</i>
|
Chris@49
|
8668 </li>
|
Chris@49
|
8669 <br>
|
Chris@49
|
8670 <li>
|
Chris@49
|
8671 The divide-and-conquer algorithm provides slightly different results, but is notably faster for large matrices
|
Chris@49
|
8672 </li>
|
Chris@49
|
8673 <br>
|
Chris@49
|
8674 <li>If <i>X</i> is square, it can be reconstructed using <i>X = U*diagmat(s)*V.t()</i>
|
Chris@49
|
8675 </li>
|
Chris@49
|
8676 <br>
|
Chris@49
|
8677 <li>
|
Chris@49
|
8678 The singular values are in descending order
|
Chris@49
|
8679 </li>
|
Chris@49
|
8680 <br>
|
Chris@49
|
8681 <li>
|
Chris@49
|
8682 If the decomposition fails, the output objects are reset and:
|
Chris@49
|
8683 <ul>
|
Chris@49
|
8684 <li><i>svd(X)</i> throws a <i>std::runtime_error</i> exception</li>
|
Chris@49
|
8685 <li><i>svd(s,X)</i> and <i>svd(U,s,V,X)</i> return a bool set to <i>false</i></li>
|
Chris@49
|
8686 </ul>
|
Chris@49
|
8687 </li>
|
Chris@49
|
8688 <br>
|
Chris@49
|
8689 <li>
|
Chris@49
|
8690 <b>NOTE:</b> Old versions of the ATLAS library (eg. 3.6) can corrupt memory and crash your program;
|
Chris@49
|
8691 the standard LAPACK library and later versions of ATLAS (eg. 3.8) work without problems
|
Chris@49
|
8692 </li>
|
Chris@49
|
8693 <br>
|
Chris@49
|
8694 <li>
|
Chris@49
|
8695 Examples:
|
Chris@49
|
8696 <ul>
|
Chris@49
|
8697 <pre>
|
Chris@49
|
8698 mat X = randu<mat>(5,5);
|
Chris@49
|
8699
|
Chris@49
|
8700 mat U;
|
Chris@49
|
8701 vec s;
|
Chris@49
|
8702 mat V;
|
Chris@49
|
8703
|
Chris@49
|
8704 svd(U,s,V,X); // use standard algorithm by default
|
Chris@49
|
8705
|
Chris@49
|
8706 svd(U,s,V,X, "dc"); // use "divide & conquer" algorithm
|
Chris@49
|
8707 </pre>
|
Chris@49
|
8708 </ul>
|
Chris@49
|
8709 </li>
|
Chris@49
|
8710 <br>
|
Chris@49
|
8711 <li>
|
Chris@49
|
8712 See also:
|
Chris@49
|
8713 <ul>
|
Chris@49
|
8714 <li><a href="#svd_econ">svd_econ()</a></li>
|
Chris@49
|
8715 <li><a href="#eig_gen">eig_gen()</a></li>
|
Chris@49
|
8716 <li><a href="#eig_sym">eig_sym()</a></li>
|
Chris@49
|
8717 <li><a href="http://en.wikipedia.org/wiki/Singular_value_decomposition">singular value decomposition in Wikipedia</a></li>
|
Chris@49
|
8718 <li><a href="http://mathworld.wolfram.com/SingularValueDecomposition.html">singular value decomposition in MathWorld</a></li>
|
Chris@49
|
8719 </ul>
|
Chris@49
|
8720 </li>
|
Chris@49
|
8721 </ul>
|
Chris@49
|
8722 <br>
|
Chris@49
|
8723 <hr class="greyline">
|
Chris@49
|
8724 <br>
|
Chris@49
|
8725
|
Chris@49
|
8726 <a name="svd_econ"></a>
|
Chris@49
|
8727 <b>svd_econ(mat U, vec s, mat V, mat X, mode = 'b')</b>
|
Chris@49
|
8728 <br><b>svd_econ(cx_mat U, vec s, cx_mat V, cx_mat X, mode = 'b')</b>
|
Chris@49
|
8729 <ul>
|
Chris@49
|
8730 <li>
|
Chris@49
|
8731 Economical singular value decomposition of <i>X</i>
|
Chris@49
|
8732 </li>
|
Chris@49
|
8733 <br>
|
Chris@49
|
8734 <li>
|
Chris@49
|
8735 mode is one of:
|
Chris@49
|
8736 <ul>
|
Chris@49
|
8737 <li><i>'l'</i>: compute only left singular vectors</li>
|
Chris@49
|
8738 <li><i>'r'</i>: compute only right singular vectors</li>
|
Chris@49
|
8739 <li><i>'b'</i>: compute both left and right singular vectors (default)</li>
|
Chris@49
|
8740 </ul>
|
Chris@49
|
8741 </li>
|
Chris@49
|
8742 <br>
|
Chris@49
|
8743 <li>
|
Chris@49
|
8744 The singular values are in descending order
|
Chris@49
|
8745 </li>
|
Chris@49
|
8746 <br>
|
Chris@49
|
8747 <li>
|
Chris@49
|
8748 If the decomposition fails, the output objects are reset and bool set to <i>false</i> is returned
|
Chris@49
|
8749 </li>
|
Chris@49
|
8750 <br>
|
Chris@49
|
8751 <li>
|
Chris@49
|
8752 Examples:
|
Chris@49
|
8753 <ul>
|
Chris@49
|
8754 <pre>
|
Chris@49
|
8755 mat X = randu<mat>(4,5);
|
Chris@49
|
8756
|
Chris@49
|
8757 mat U;
|
Chris@49
|
8758 vec s;
|
Chris@49
|
8759 mat V;
|
Chris@49
|
8760 svd_econ(U, s, V, X, 'l');
|
Chris@49
|
8761 </pre>
|
Chris@49
|
8762 </ul>
|
Chris@49
|
8763 </li>
|
Chris@49
|
8764 <br>
|
Chris@49
|
8765 <li>
|
Chris@49
|
8766 See also:
|
Chris@49
|
8767 <ul>
|
Chris@49
|
8768 <li><a href="#svd">svd()</a></li>
|
Chris@49
|
8769 <li><a href="#eig_gen">eig_gen()</a></li>
|
Chris@49
|
8770 <li><a href="#eig_sym">eig_sym()</a></li>
|
Chris@49
|
8771 <li><a href="http://en.wikipedia.org/wiki/Singular_value_decomposition">singular value decomposition in Wikipedia</a></li>
|
Chris@49
|
8772 <li><a href="http://mathworld.wolfram.com/SingularValueDecomposition.html">singular value decomposition in MathWorld</a></li>
|
Chris@49
|
8773 </ul>
|
Chris@49
|
8774 </li>
|
Chris@49
|
8775 </ul>
|
Chris@49
|
8776 <br>
|
Chris@49
|
8777 <hr class="greyline">
|
Chris@49
|
8778 <br>
|
Chris@49
|
8779
|
Chris@49
|
8780 <a name="syl"></a>
|
Chris@49
|
8781 <b>X = syl(A, B, C)</b>
|
Chris@49
|
8782 <br><b>syl(X, A, B, C)</b>
|
Chris@49
|
8783 <ul>
|
Chris@49
|
8784 <li>Solve the Sylvester equation, ie., <i>AX + XB + C = 0</i>, where <i>X</i> is unknown.</li>
|
Chris@49
|
8785 <br>
|
Chris@49
|
8786 <li>Matrices <i>A</i>, <i>B</i> and <i>C</i> must be square sized.</li>
|
Chris@49
|
8787 <br>
|
Chris@49
|
8788 <li>
|
Chris@49
|
8789 If no solution is found, <i>X</i> is reset and:
|
Chris@49
|
8790 <ul>
|
Chris@49
|
8791 <li><i>syl(A,B,C)</i> throws a <i>std::runtime_error</i> exception</li>
|
Chris@49
|
8792 <li><i>svd(X,A,B,C)</i> returns a bool set to <i>false</i></li>
|
Chris@49
|
8793 </ul>
|
Chris@49
|
8794 </li>
|
Chris@49
|
8795 <br>
|
Chris@49
|
8796 <li>
|
Chris@49
|
8797 Examples:
|
Chris@49
|
8798 <ul>
|
Chris@49
|
8799 <pre>
|
Chris@49
|
8800 mat A = randu<mat>(5,5);
|
Chris@49
|
8801 mat B = randu<mat>(5,5);
|
Chris@49
|
8802 mat C = randu<mat>(5,5);
|
Chris@49
|
8803
|
Chris@49
|
8804 mat X1 = syl(A, B, C);
|
Chris@49
|
8805
|
Chris@49
|
8806 mat X2;
|
Chris@49
|
8807 syl(X2, A, B, C);
|
Chris@49
|
8808 </pre>
|
Chris@49
|
8809 </ul>
|
Chris@49
|
8810 </li>
|
Chris@49
|
8811 <br>
|
Chris@49
|
8812 <li>
|
Chris@49
|
8813 See also:
|
Chris@49
|
8814 <ul>
|
Chris@49
|
8815 <li><a href="#solve">solve()</a></li>
|
Chris@49
|
8816 <li><a href="http://en.wikipedia.org/wiki/Sylvester_equation">Sylvester equation in Wikipedia</a></li>
|
Chris@49
|
8817 </ul>
|
Chris@49
|
8818 </li>
|
Chris@49
|
8819 <br>
|
Chris@49
|
8820 </ul>
|
Chris@49
|
8821 <hr class="greyline">
|
Chris@49
|
8822
|
Chris@49
|
8823
|
Chris@49
|
8824 <hr class="greyline">
|
Chris@49
|
8825 <br>
|
Chris@49
|
8826 <br>
|
Chris@49
|
8827 <font size=+1><b>Miscellaneous</b></font>
|
Chris@49
|
8828 <br>
|
Chris@49
|
8829 <br>
|
Chris@49
|
8830 <hr class="greyline">
|
Chris@49
|
8831 <br>
|
Chris@49
|
8832
|
Chris@49
|
8833 <a name="is_finite_standalone"></a>
|
Chris@49
|
8834 <b>is_finite(X)</b>
|
Chris@49
|
8835 <ul>
|
Chris@49
|
8836 <li>
|
Chris@49
|
8837 Returns <i>true</i> if all elements in <i>X</i> are finite
|
Chris@49
|
8838 </li>
|
Chris@49
|
8839 <br>
|
Chris@49
|
8840 <li>
|
Chris@49
|
8841 Returns <i>false</i> if at least one element in <i>X</i> is non-finite (±infinity or NaN)
|
Chris@49
|
8842 </li>
|
Chris@49
|
8843 <br>
|
Chris@49
|
8844 <li>
|
Chris@49
|
8845 <i>X</i> can be a scalar (eg. <i>double</i>), vector, matrix or cube
|
Chris@49
|
8846 </li>
|
Chris@49
|
8847 <br>
|
Chris@49
|
8848 <li>
|
Chris@49
|
8849 Examples:
|
Chris@49
|
8850 <ul>
|
Chris@49
|
8851 <pre>
|
Chris@49
|
8852 mat A = randu<mat>(5,5);
|
Chris@49
|
8853 mat B = randu<mat>(5,5);
|
Chris@49
|
8854
|
Chris@49
|
8855 B(1,1) = datum::nan;
|
Chris@49
|
8856
|
Chris@49
|
8857 cout << is_finite(A) << endl;
|
Chris@49
|
8858 cout << is_finite(B) << endl;
|
Chris@49
|
8859
|
Chris@49
|
8860 cout << is_finite( 0.123456789 ) << endl;
|
Chris@49
|
8861 cout << is_finite( datum::nan ) << endl;
|
Chris@49
|
8862 cout << is_finite( datum::inf ) << endl;
|
Chris@49
|
8863 </pre>
|
Chris@49
|
8864 </ul>
|
Chris@49
|
8865 </li>
|
Chris@49
|
8866 <br>
|
Chris@49
|
8867 <li>
|
Chris@49
|
8868 See also:
|
Chris@49
|
8869 <ul>
|
Chris@49
|
8870 <li><a href="#constants">datum::nan</a></li>
|
Chris@49
|
8871 <li><a href="#constants">datum::inf</a></li>
|
Chris@49
|
8872 <li><a href="#is_finite">.is_finite()</a> (member function of <i>Mat</i> and <i>Cube</i>)</li>
|
Chris@49
|
8873 </ul>
|
Chris@49
|
8874 </li>
|
Chris@49
|
8875 <br>
|
Chris@49
|
8876 </ul>
|
Chris@49
|
8877 <hr class="greyline"><br>
|
Chris@49
|
8878
|
Chris@49
|
8879 <a name="logging"></a>
|
Chris@49
|
8880 <b>logging of warnings and errors</b>
|
Chris@49
|
8881 <br>
|
Chris@49
|
8882 <br>
|
Chris@49
|
8883 <b>set_stream_err1(user_stream)</b><br>
|
Chris@49
|
8884 <b>set_stream_err2(user_stream)</b><br>
|
Chris@49
|
8885 <br>
|
Chris@49
|
8886 <b>std::ostream& x = get_stream_err1()</b>
|
Chris@49
|
8887 <br>
|
Chris@49
|
8888 <b>std::ostream& x = get_stream_err2()</b>
|
Chris@49
|
8889 <br>
|
Chris@49
|
8890 <ul>
|
Chris@49
|
8891 <li>
|
Chris@49
|
8892 By default, Armadillo prints warnings and messages associated with <i>std::logic_error</i> and <i>std::runtime_error</i> exceptions to the <i>std::cout</i> stream
|
Chris@49
|
8893 </li>
|
Chris@49
|
8894 <br>
|
Chris@49
|
8895 <li><b>set_stream_err1()</b>: change the stream for messages associated with <i>std::logic_error</i> exceptions (eg. out of bounds accesses)</li>
|
Chris@49
|
8896 <br>
|
Chris@49
|
8897 <li><b>set_stream_err2()</b>: change the stream for warnings and messages associated with <i>std::runtime_error</i> exceptions (eg. failed decompositions)</li>
|
Chris@49
|
8898 <br>
|
Chris@49
|
8899 <li><b>get_stream_err1()</b>: get a reference to the stream for messages associated with <i>std::logic_error</i> exceptions</li>
|
Chris@49
|
8900 <br>
|
Chris@49
|
8901 <li><b>get_stream_err2()</b>: get a reference to the stream for warnings and messages associated with <i>std::runtime_error</i> exceptions</li>
|
Chris@49
|
8902 <br>
|
Chris@49
|
8903 <li>
|
Chris@49
|
8904 Examples:
|
Chris@49
|
8905 <ul>
|
Chris@49
|
8906 <pre>
|
Chris@49
|
8907 // print "hello" to the current err1 stream
|
Chris@49
|
8908 get_stream_err1() << "hello" << endl;
|
Chris@49
|
8909
|
Chris@49
|
8910 // change the err2 stream to be a file
|
Chris@49
|
8911 ofstream f("my_log.txt");
|
Chris@49
|
8912 set_stream_err2(f);
|
Chris@49
|
8913
|
Chris@49
|
8914 // trying to invert a singular matrix
|
Chris@49
|
8915 // will print a message to the err2 stream
|
Chris@49
|
8916 // and throw an exception
|
Chris@49
|
8917 mat X = zeros<mat>(5,5);
|
Chris@49
|
8918 mat Y = inv(X);
|
Chris@49
|
8919
|
Chris@49
|
8920 // disable messages being printed to the err2 stream
|
Chris@49
|
8921 std::ostream nullstream(0);
|
Chris@49
|
8922 set_stream_err2(nullstream);
|
Chris@49
|
8923 </pre>
|
Chris@49
|
8924 </ul>
|
Chris@49
|
8925 </li>
|
Chris@49
|
8926 <br>
|
Chris@49
|
8927 <li>
|
Chris@49
|
8928 <b>Caveat</b>: set_stream_err1() and set_stream_err2() will not change the stream used by .print()
|
Chris@49
|
8929 </li>
|
Chris@49
|
8930 <br>
|
Chris@49
|
8931 <li>
|
Chris@49
|
8932 See also:
|
Chris@49
|
8933 <ul>
|
Chris@49
|
8934 <li><a href="#print">.print()</a></li>
|
Chris@49
|
8935 <li><a href="http://cplusplus.com/reference/iostream/cout/">std::cout</a></li>
|
Chris@49
|
8936 <li><a href="http://cplusplus.com/reference/iostream/ostream/">std::ostream</a></li>
|
Chris@49
|
8937 <li><a href="http://cplusplus.com/reference/std/stdexcept/logic_error/">std::logic_error</a></li>
|
Chris@49
|
8938 <li><a href="http://cplusplus.com/reference/std/stdexcept/runtime_error/">std::runtime_error</a></li>
|
Chris@49
|
8939 <li><a href="http://cplusplus.com/doc/tutorial/exceptions/">tutorial on exceptions</a></li>
|
Chris@49
|
8940 </ul>
|
Chris@49
|
8941 </li>
|
Chris@49
|
8942 <br>
|
Chris@49
|
8943 </ul>
|
Chris@49
|
8944 <hr class="greyline"><br>
|
Chris@49
|
8945
|
Chris@49
|
8946
|
Chris@49
|
8947
|
Chris@49
|
8948 <a name="constants"></a>
|
Chris@49
|
8949 <b>various constants (pi, inf, speed of light, ...)</b>
|
Chris@49
|
8950 <br>
|
Chris@49
|
8951 <ul>
|
Chris@49
|
8952 <li>
|
Chris@49
|
8953 Collection of math and fundamental physical constants
|
Chris@49
|
8954 </li>
|
Chris@49
|
8955 <br>
|
Chris@49
|
8956 <li>
|
Chris@49
|
8957 Physical constants were mainly taken from
|
Chris@49
|
8958 <a href="http://physics.nist.gov/cuu/Constants">NIST</a>
|
Chris@49
|
8959 and some from
|
Chris@49
|
8960 <a href="http://www.wolframalpha.com">WolframAlpha</a>
|
Chris@49
|
8961 on 2009-06-23;
|
Chris@49
|
8962 constants from NIST are in turn sourced from the <a href="http://physics.nist.gov/cuu/Constants/papers.html">2006 CODATA values</a>
|
Chris@49
|
8963 </li>
|
Chris@49
|
8964 <br>
|
Chris@49
|
8965 <li>
|
Chris@49
|
8966 The constants are stored in the <i>Datum<type></i> class,
|
Chris@49
|
8967 where <i>type</i> is either <i>float</i> or <i>double</i>
|
Chris@49
|
8968 </li>
|
Chris@49
|
8969 <br>
|
Chris@49
|
8970 <li>
|
Chris@49
|
8971 For convenience,
|
Chris@49
|
8972 <i>Datum<double></i> has been typedefed as <i>datum</i>
|
Chris@49
|
8973 while
|
Chris@49
|
8974 <i>Datum<float></i> has been typedefed as <i>fdatum</i>
|
Chris@49
|
8975 </li>
|
Chris@49
|
8976 <br>
|
Chris@49
|
8977 <li>
|
Chris@49
|
8978 In previous versions of Armadillo (eg. 2.x), the constants are accessed via static functions in <i>math</i> and <i>phy</i> classes, eg. <i>math::pi()</i>;
|
Chris@49
|
8979 for compatibility, these classes are still available in version 3.x, but are not explicitly documented
|
Chris@49
|
8980 </li>
|
Chris@49
|
8981 <br>
|
Chris@49
|
8982 <li>
|
Chris@49
|
8983 Meaning of the constants:
|
Chris@49
|
8984 <br>
|
Chris@49
|
8985 <br>
|
Chris@49
|
8986 <ul>
|
Chris@49
|
8987 <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
8988 <tbody>
|
Chris@49
|
8989 <tr>
|
Chris@49
|
8990 <td style="vertical-align: top;">
|
Chris@49
|
8991 datum::pi
|
Chris@49
|
8992 </td>
|
Chris@49
|
8993 <td style="vertical-align: top;">
|
Chris@49
|
8994
|
Chris@49
|
8995 </td>
|
Chris@49
|
8996 <td style="vertical-align: top;">
|
Chris@49
|
8997 π, the ratio of any circle's circumference to its diameter
|
Chris@49
|
8998 </td>
|
Chris@49
|
8999 </tr>
|
Chris@49
|
9000 <tr>
|
Chris@49
|
9001 <td style="vertical-align: top;">
|
Chris@49
|
9002 datum::inf
|
Chris@49
|
9003 </td>
|
Chris@49
|
9004 <td style="vertical-align: top;">
|
Chris@49
|
9005
|
Chris@49
|
9006 </td>
|
Chris@49
|
9007 <td style="vertical-align: top;">
|
Chris@49
|
9008 infinity
|
Chris@49
|
9009 </td>
|
Chris@49
|
9010 </tr>
|
Chris@49
|
9011 <tr>
|
Chris@49
|
9012 <td style="vertical-align: top;">
|
Chris@49
|
9013 datum::nan
|
Chris@49
|
9014 </td>
|
Chris@49
|
9015 <td style="vertical-align: top;">
|
Chris@49
|
9016
|
Chris@49
|
9017 </td>
|
Chris@49
|
9018 <td style="vertical-align: top;">
|
Chris@49
|
9019 “not a number” (NaN); <b>caveat:</b> NaN is not equal to anything, even itself
|
Chris@49
|
9020 </td>
|
Chris@49
|
9021 </tr>
|
Chris@49
|
9022 <tr>
|
Chris@49
|
9023 <td style="vertical-align: top;">
|
Chris@49
|
9024 datum::e
|
Chris@49
|
9025 </td>
|
Chris@49
|
9026 <td style="vertical-align: top;">
|
Chris@49
|
9027
|
Chris@49
|
9028 </td>
|
Chris@49
|
9029 <td style="vertical-align: top;">
|
Chris@49
|
9030 base of the natural logarithm
|
Chris@49
|
9031 </td>
|
Chris@49
|
9032 </tr>
|
Chris@49
|
9033 <tr>
|
Chris@49
|
9034 <td style="vertical-align: top;">
|
Chris@49
|
9035 datum::sqrt2
|
Chris@49
|
9036 </td>
|
Chris@49
|
9037 <td style="vertical-align: top;">
|
Chris@49
|
9038
|
Chris@49
|
9039 </td>
|
Chris@49
|
9040 <td style="vertical-align: top;">
|
Chris@49
|
9041 square root of 2
|
Chris@49
|
9042 </td>
|
Chris@49
|
9043 </tr>
|
Chris@49
|
9044 <tr>
|
Chris@49
|
9045 <td style="vertical-align: top;">
|
Chris@49
|
9046 datum::eps
|
Chris@49
|
9047 </td>
|
Chris@49
|
9048 <td style="vertical-align: top;">
|
Chris@49
|
9049
|
Chris@49
|
9050 </td>
|
Chris@49
|
9051 <td style="vertical-align: top;">
|
Chris@49
|
9052 the difference between 1 and the least value greater than 1 that is representable (type and machine dependant)
|
Chris@49
|
9053 </td>
|
Chris@49
|
9054 </tr>
|
Chris@49
|
9055 <tr>
|
Chris@49
|
9056 <td style="vertical-align: top;">
|
Chris@49
|
9057 datum::log_min
|
Chris@49
|
9058 </td>
|
Chris@49
|
9059 <td style="vertical-align: top;">
|
Chris@49
|
9060
|
Chris@49
|
9061 </td>
|
Chris@49
|
9062 <td style="vertical-align: top;">
|
Chris@49
|
9063 log of minimum non-zero value (type and machine dependant)
|
Chris@49
|
9064 </td>
|
Chris@49
|
9065 </tr>
|
Chris@49
|
9066 <tr>
|
Chris@49
|
9067 <td style="vertical-align: top;">
|
Chris@49
|
9068 datum::log_max
|
Chris@49
|
9069 </td>
|
Chris@49
|
9070 <td style="vertical-align: top;">
|
Chris@49
|
9071
|
Chris@49
|
9072 </td>
|
Chris@49
|
9073 <td style="vertical-align: top;">
|
Chris@49
|
9074 log of maximum value (type and machine dependant)
|
Chris@49
|
9075 </td>
|
Chris@49
|
9076 </tr>
|
Chris@49
|
9077 <tr>
|
Chris@49
|
9078 <td style="vertical-align: top;">
|
Chris@49
|
9079 datum::euler
|
Chris@49
|
9080 </td>
|
Chris@49
|
9081 <td style="vertical-align: top;">
|
Chris@49
|
9082
|
Chris@49
|
9083 </td>
|
Chris@49
|
9084 <td style="vertical-align: top;">
|
Chris@49
|
9085 Euler's constant, aka Euler-Mascheroni constant
|
Chris@49
|
9086 </td>
|
Chris@49
|
9087 </tr>
|
Chris@49
|
9088 <tr>
|
Chris@49
|
9089 <td style="vertical-align: top;">
|
Chris@49
|
9090 datum::gratio
|
Chris@49
|
9091 </td>
|
Chris@49
|
9092 <td style="vertical-align: top;">
|
Chris@49
|
9093
|
Chris@49
|
9094 </td>
|
Chris@49
|
9095 <td style="vertical-align: top;">
|
Chris@49
|
9096 golden ratio
|
Chris@49
|
9097 </td>
|
Chris@49
|
9098 </tr>
|
Chris@49
|
9099 <tr>
|
Chris@49
|
9100 <td style="vertical-align: top;">
|
Chris@49
|
9101 datum::m_u
|
Chris@49
|
9102 </td>
|
Chris@49
|
9103 <td style="vertical-align: top;">
|
Chris@49
|
9104
|
Chris@49
|
9105 </td>
|
Chris@49
|
9106 <td style="vertical-align: top;">
|
Chris@49
|
9107 atomic mass constant (in kg)
|
Chris@49
|
9108 </td>
|
Chris@49
|
9109 </tr>
|
Chris@49
|
9110 <tr>
|
Chris@49
|
9111 <td style="vertical-align: top;">
|
Chris@49
|
9112 datum::N_A
|
Chris@49
|
9113 </td>
|
Chris@49
|
9114 <td style="vertical-align: top;">
|
Chris@49
|
9115
|
Chris@49
|
9116 </td>
|
Chris@49
|
9117 <td style="vertical-align: top;">
|
Chris@49
|
9118 Avogadro constant
|
Chris@49
|
9119 </td>
|
Chris@49
|
9120 </tr>
|
Chris@49
|
9121 <tr>
|
Chris@49
|
9122 <td style="vertical-align: top;">
|
Chris@49
|
9123 datum::k
|
Chris@49
|
9124 </td>
|
Chris@49
|
9125 <td style="vertical-align: top;">
|
Chris@49
|
9126
|
Chris@49
|
9127 </td>
|
Chris@49
|
9128 <td style="vertical-align: top;">
|
Chris@49
|
9129 Boltzmann constant (in joules per kelvin)
|
Chris@49
|
9130 </td>
|
Chris@49
|
9131 </tr>
|
Chris@49
|
9132 <tr>
|
Chris@49
|
9133 <td style="vertical-align: top;">
|
Chris@49
|
9134 datum::k_evk
|
Chris@49
|
9135 </td>
|
Chris@49
|
9136 <td style="vertical-align: top;">
|
Chris@49
|
9137
|
Chris@49
|
9138 </td>
|
Chris@49
|
9139 <td style="vertical-align: top;">
|
Chris@49
|
9140 Boltzmann constant (in eV/K)
|
Chris@49
|
9141 </td>
|
Chris@49
|
9142 </tr>
|
Chris@49
|
9143 <tr>
|
Chris@49
|
9144 <td style="vertical-align: top;">
|
Chris@49
|
9145 datum::a_0
|
Chris@49
|
9146 </td>
|
Chris@49
|
9147 <td style="vertical-align: top;">
|
Chris@49
|
9148
|
Chris@49
|
9149 </td>
|
Chris@49
|
9150 <td style="vertical-align: top;">
|
Chris@49
|
9151 Bohr radius (in meters)
|
Chris@49
|
9152 </td>
|
Chris@49
|
9153 </tr>
|
Chris@49
|
9154 <tr>
|
Chris@49
|
9155 <td style="vertical-align: top;">
|
Chris@49
|
9156 datum::mu_B
|
Chris@49
|
9157 </td>
|
Chris@49
|
9158 <td style="vertical-align: top;">
|
Chris@49
|
9159
|
Chris@49
|
9160 </td>
|
Chris@49
|
9161 <td style="vertical-align: top;">
|
Chris@49
|
9162 Bohr magneton
|
Chris@49
|
9163 </td>
|
Chris@49
|
9164 </tr>
|
Chris@49
|
9165 <tr>
|
Chris@49
|
9166 <td style="vertical-align: top;">
|
Chris@49
|
9167 datum::Z_0
|
Chris@49
|
9168 </td>
|
Chris@49
|
9169 <td style="vertical-align: top;">
|
Chris@49
|
9170
|
Chris@49
|
9171 </td>
|
Chris@49
|
9172 <td style="vertical-align: top;">
|
Chris@49
|
9173 characteristic impedance of vacuum (in ohms)
|
Chris@49
|
9174 </td>
|
Chris@49
|
9175 </tr>
|
Chris@49
|
9176 <tr>
|
Chris@49
|
9177 <td style="vertical-align: top;">
|
Chris@49
|
9178 datum::G_0
|
Chris@49
|
9179 </td>
|
Chris@49
|
9180 <td style="vertical-align: top;">
|
Chris@49
|
9181
|
Chris@49
|
9182 </td>
|
Chris@49
|
9183 <td style="vertical-align: top;">
|
Chris@49
|
9184 conductance quantum (in siemens)
|
Chris@49
|
9185 </td>
|
Chris@49
|
9186 </tr>
|
Chris@49
|
9187 <tr>
|
Chris@49
|
9188 <td style="vertical-align: top;">
|
Chris@49
|
9189 datum::k_e
|
Chris@49
|
9190 </td>
|
Chris@49
|
9191 <td style="vertical-align: top;">
|
Chris@49
|
9192
|
Chris@49
|
9193 </td>
|
Chris@49
|
9194 <td style="vertical-align: top;">
|
Chris@49
|
9195 Coulomb's constant (in meters per farad)
|
Chris@49
|
9196 </td>
|
Chris@49
|
9197 </tr>
|
Chris@49
|
9198 <tr>
|
Chris@49
|
9199 <td style="vertical-align: top;">
|
Chris@49
|
9200 datum::eps_0
|
Chris@49
|
9201 </td>
|
Chris@49
|
9202 <td style="vertical-align: top;">
|
Chris@49
|
9203
|
Chris@49
|
9204 </td>
|
Chris@49
|
9205 <td style="vertical-align: top;">
|
Chris@49
|
9206 electric constant (in farads per meter)
|
Chris@49
|
9207 </td>
|
Chris@49
|
9208 </tr>
|
Chris@49
|
9209 <tr>
|
Chris@49
|
9210 <td style="vertical-align: top;">
|
Chris@49
|
9211 datum::m_e
|
Chris@49
|
9212 </td>
|
Chris@49
|
9213 <td style="vertical-align: top;">
|
Chris@49
|
9214
|
Chris@49
|
9215 </td>
|
Chris@49
|
9216 <td style="vertical-align: top;">
|
Chris@49
|
9217 electron mass (in kg)
|
Chris@49
|
9218 </td>
|
Chris@49
|
9219 </tr>
|
Chris@49
|
9220 <tr>
|
Chris@49
|
9221 <td style="vertical-align: top;">
|
Chris@49
|
9222 datum::eV
|
Chris@49
|
9223 </td>
|
Chris@49
|
9224 <td style="vertical-align: top;">
|
Chris@49
|
9225
|
Chris@49
|
9226 </td>
|
Chris@49
|
9227 <td style="vertical-align: top;">
|
Chris@49
|
9228 electron volt (in joules)
|
Chris@49
|
9229 </td>
|
Chris@49
|
9230 </tr>
|
Chris@49
|
9231 <tr>
|
Chris@49
|
9232 <td style="vertical-align: top;">
|
Chris@49
|
9233 datum::ec
|
Chris@49
|
9234 </td>
|
Chris@49
|
9235 <td style="vertical-align: top;">
|
Chris@49
|
9236
|
Chris@49
|
9237 </td>
|
Chris@49
|
9238 <td style="vertical-align: top;">
|
Chris@49
|
9239 elementary charge (in coulombs)
|
Chris@49
|
9240 </td>
|
Chris@49
|
9241 </tr>
|
Chris@49
|
9242 <tr>
|
Chris@49
|
9243 <td style="vertical-align: top;">
|
Chris@49
|
9244 datum::F
|
Chris@49
|
9245 </td>
|
Chris@49
|
9246 <td style="vertical-align: top;">
|
Chris@49
|
9247
|
Chris@49
|
9248 </td>
|
Chris@49
|
9249 <td style="vertical-align: top;">
|
Chris@49
|
9250 Faraday constant (in coulombs)
|
Chris@49
|
9251 </td>
|
Chris@49
|
9252 </tr>
|
Chris@49
|
9253 <tr>
|
Chris@49
|
9254 <td style="vertical-align: top;">
|
Chris@49
|
9255 datum::alpha
|
Chris@49
|
9256 </td>
|
Chris@49
|
9257 <td style="vertical-align: top;">
|
Chris@49
|
9258
|
Chris@49
|
9259 </td>
|
Chris@49
|
9260 <td style="vertical-align: top;">
|
Chris@49
|
9261 fine-structure constant
|
Chris@49
|
9262 </td>
|
Chris@49
|
9263 </tr>
|
Chris@49
|
9264 <tr>
|
Chris@49
|
9265 <td style="vertical-align: top;">
|
Chris@49
|
9266 datum::alpha_inv
|
Chris@49
|
9267 </td>
|
Chris@49
|
9268 <td style="vertical-align: top;">
|
Chris@49
|
9269
|
Chris@49
|
9270 </td>
|
Chris@49
|
9271 <td style="vertical-align: top;">
|
Chris@49
|
9272 inverse fine-structure constant
|
Chris@49
|
9273 </td>
|
Chris@49
|
9274 </tr>
|
Chris@49
|
9275 <tr>
|
Chris@49
|
9276 <td style="vertical-align: top;">
|
Chris@49
|
9277 datum::K_J
|
Chris@49
|
9278 </td>
|
Chris@49
|
9279 <td style="vertical-align: top;">
|
Chris@49
|
9280
|
Chris@49
|
9281 </td>
|
Chris@49
|
9282 <td style="vertical-align: top;">
|
Chris@49
|
9283 Josephson constant
|
Chris@49
|
9284 </td>
|
Chris@49
|
9285 </tr>
|
Chris@49
|
9286 <tr>
|
Chris@49
|
9287 <td style="vertical-align: top;">
|
Chris@49
|
9288 datum::mu_0
|
Chris@49
|
9289 </td>
|
Chris@49
|
9290 <td style="vertical-align: top;">
|
Chris@49
|
9291
|
Chris@49
|
9292 </td>
|
Chris@49
|
9293 <td style="vertical-align: top;">
|
Chris@49
|
9294 magnetic constant (in henries per meter)
|
Chris@49
|
9295 </td>
|
Chris@49
|
9296 </tr>
|
Chris@49
|
9297 <tr>
|
Chris@49
|
9298 <td style="vertical-align: top;">
|
Chris@49
|
9299 datum::phi_0
|
Chris@49
|
9300 </td>
|
Chris@49
|
9301 <td style="vertical-align: top;">
|
Chris@49
|
9302
|
Chris@49
|
9303 </td>
|
Chris@49
|
9304 <td style="vertical-align: top;">
|
Chris@49
|
9305 magnetic flux quantum (in webers)
|
Chris@49
|
9306 </td>
|
Chris@49
|
9307 </tr>
|
Chris@49
|
9308 <tr>
|
Chris@49
|
9309 <td style="vertical-align: top;">
|
Chris@49
|
9310 datum::R
|
Chris@49
|
9311 </td>
|
Chris@49
|
9312 <td style="vertical-align: top;">
|
Chris@49
|
9313
|
Chris@49
|
9314 </td>
|
Chris@49
|
9315 <td style="vertical-align: top;">
|
Chris@49
|
9316 molar gas constant (in joules per mole kelvin)
|
Chris@49
|
9317 </td>
|
Chris@49
|
9318 </tr>
|
Chris@49
|
9319 <tr>
|
Chris@49
|
9320 <td style="vertical-align: top;">
|
Chris@49
|
9321 datum::G
|
Chris@49
|
9322 </td>
|
Chris@49
|
9323 <td style="vertical-align: top;">
|
Chris@49
|
9324
|
Chris@49
|
9325 </td>
|
Chris@49
|
9326 <td style="vertical-align: top;">
|
Chris@49
|
9327 Newtonian constant of gravitation (in newton square meters per kilogram squared)
|
Chris@49
|
9328 </td>
|
Chris@49
|
9329 </tr>
|
Chris@49
|
9330 <tr>
|
Chris@49
|
9331 <td style="vertical-align: top;">
|
Chris@49
|
9332 datum::h
|
Chris@49
|
9333 </td>
|
Chris@49
|
9334 <td style="vertical-align: top;">
|
Chris@49
|
9335
|
Chris@49
|
9336 </td>
|
Chris@49
|
9337 <td style="vertical-align: top;">
|
Chris@49
|
9338 Planck constant (in joule seconds)
|
Chris@49
|
9339 </td>
|
Chris@49
|
9340 </tr>
|
Chris@49
|
9341 <tr>
|
Chris@49
|
9342 <td style="vertical-align: top;">
|
Chris@49
|
9343 datum::h_bar
|
Chris@49
|
9344 </td>
|
Chris@49
|
9345 <td style="vertical-align: top;">
|
Chris@49
|
9346
|
Chris@49
|
9347 </td>
|
Chris@49
|
9348 <td style="vertical-align: top;">
|
Chris@49
|
9349 Planck constant over 2 pi, aka reduced Planck constant (in joule seconds)
|
Chris@49
|
9350 </td>
|
Chris@49
|
9351 </tr>
|
Chris@49
|
9352 <tr>
|
Chris@49
|
9353 <td style="vertical-align: top;">
|
Chris@49
|
9354 datum::m_p
|
Chris@49
|
9355 </td>
|
Chris@49
|
9356 <td style="vertical-align: top;">
|
Chris@49
|
9357
|
Chris@49
|
9358 </td>
|
Chris@49
|
9359 <td style="vertical-align: top;">
|
Chris@49
|
9360 proton mass (in kg)
|
Chris@49
|
9361 </td>
|
Chris@49
|
9362 </tr>
|
Chris@49
|
9363 <tr>
|
Chris@49
|
9364 <td style="vertical-align: top;">
|
Chris@49
|
9365 datum::R_inf
|
Chris@49
|
9366 </td>
|
Chris@49
|
9367 <td style="vertical-align: top;">
|
Chris@49
|
9368
|
Chris@49
|
9369 </td>
|
Chris@49
|
9370 <td style="vertical-align: top;">
|
Chris@49
|
9371 Rydberg constant (in reciprocal meters)
|
Chris@49
|
9372 </td>
|
Chris@49
|
9373 </tr>
|
Chris@49
|
9374 <tr>
|
Chris@49
|
9375 <td style="vertical-align: top;">
|
Chris@49
|
9376 datum::c_0
|
Chris@49
|
9377 </td>
|
Chris@49
|
9378 <td style="vertical-align: top;">
|
Chris@49
|
9379
|
Chris@49
|
9380 </td>
|
Chris@49
|
9381 <td style="vertical-align: top;">
|
Chris@49
|
9382 speed of light in vacuum (in meters per second)
|
Chris@49
|
9383 </td>
|
Chris@49
|
9384 </tr>
|
Chris@49
|
9385 <tr>
|
Chris@49
|
9386 <td style="vertical-align: top;">
|
Chris@49
|
9387 datum::sigma
|
Chris@49
|
9388 </td>
|
Chris@49
|
9389 <td style="vertical-align: top;">
|
Chris@49
|
9390
|
Chris@49
|
9391 </td>
|
Chris@49
|
9392 <td style="vertical-align: top;">
|
Chris@49
|
9393 Stefan-Boltzmann constant
|
Chris@49
|
9394 </td>
|
Chris@49
|
9395 </tr>
|
Chris@49
|
9396 <tr>
|
Chris@49
|
9397 <td style="vertical-align: top;">
|
Chris@49
|
9398 datum::R_k
|
Chris@49
|
9399 </td>
|
Chris@49
|
9400 <td style="vertical-align: top;">
|
Chris@49
|
9401
|
Chris@49
|
9402 </td>
|
Chris@49
|
9403 <td style="vertical-align: top;">
|
Chris@49
|
9404 von Klitzing constant (in ohms)
|
Chris@49
|
9405 </td>
|
Chris@49
|
9406 </tr>
|
Chris@49
|
9407 <tr>
|
Chris@49
|
9408 <td style="vertical-align: top;">
|
Chris@49
|
9409 datum::b
|
Chris@49
|
9410 </td>
|
Chris@49
|
9411 <td style="vertical-align: top;">
|
Chris@49
|
9412
|
Chris@49
|
9413 </td>
|
Chris@49
|
9414 <td style="vertical-align: top;">
|
Chris@49
|
9415 Wien wavelength displacement law constant
|
Chris@49
|
9416 </td>
|
Chris@49
|
9417 </tr>
|
Chris@49
|
9418 </tbody>
|
Chris@49
|
9419 </table>
|
Chris@49
|
9420 </ul>
|
Chris@49
|
9421 </li>
|
Chris@49
|
9422 <br>
|
Chris@49
|
9423 <li>
|
Chris@49
|
9424 <b>Caveat:</b>
|
Chris@49
|
9425 datum::nan is not equal to anything, even itself;
|
Chris@49
|
9426 if you wish to check whether a given number <i>x</i> is finite,
|
Chris@49
|
9427 use <a href="#is_finite_standalone">is_finite</a>(<i>x</i>).
|
Chris@49
|
9428 </li>
|
Chris@49
|
9429 <br>
|
Chris@49
|
9430 <li>
|
Chris@49
|
9431 Examples:
|
Chris@49
|
9432 <ul>
|
Chris@49
|
9433 <pre>
|
Chris@49
|
9434 cout << "2.0 * pi = " << 2.0 * datum::pi << endl;
|
Chris@49
|
9435
|
Chris@49
|
9436 cout << "speed of light = " << datum::c_0 << endl;
|
Chris@49
|
9437
|
Chris@49
|
9438 cout << "log_max for floats = ";
|
Chris@49
|
9439 cout << fdatum::log_max << endl;
|
Chris@49
|
9440
|
Chris@49
|
9441 cout << "log_max for doubles = ";
|
Chris@49
|
9442 cout << datum::log_max << endl;
|
Chris@49
|
9443 </pre>
|
Chris@49
|
9444 </ul>
|
Chris@49
|
9445 </li>
|
Chris@49
|
9446 <li>
|
Chris@49
|
9447 See also:
|
Chris@49
|
9448 <ul>
|
Chris@49
|
9449 <li><a href="#is_finite_standalone">is_finite()</a></li>
|
Chris@49
|
9450 <li><a href="http://en.wikipedia.org/wiki/NaN">NaN</a> in Wikipedia</li>
|
Chris@49
|
9451 <li><a href="http://en.wikipedia.org/wiki/Physical_constant">physical constant</a> in Wikipedia</li>
|
Chris@49
|
9452 <li><a href="http://cplusplus.com/reference/std/limits/numeric_limits/">std::numeric_limits</a></li>
|
Chris@49
|
9453 </ul>
|
Chris@49
|
9454 </li>
|
Chris@49
|
9455 </ul>
|
Chris@49
|
9456 <br>
|
Chris@49
|
9457 <hr class="greyline"><br>
|
Chris@49
|
9458
|
Chris@49
|
9459 <!--
|
Chris@49
|
9460 <a name="log_add"></a>
|
Chris@49
|
9461 <b>log_add(log_a, log_b)</b>
|
Chris@49
|
9462 <ul>
|
Chris@49
|
9463 <li>
|
Chris@49
|
9464 Safe replacement for log(exp(log_a) + exp(log_b))
|
Chris@49
|
9465 </li>
|
Chris@49
|
9466 <br>
|
Chris@49
|
9467 <li>
|
Chris@49
|
9468 Usage:
|
Chris@49
|
9469 <ul>
|
Chris@49
|
9470 <li>
|
Chris@49
|
9471 <i>scalar_type</i> log_c = log_add(log_a, log_b)
|
Chris@49
|
9472 </li>
|
Chris@49
|
9473 <li>
|
Chris@49
|
9474 <i>scalar_type</i> is either <i>float</i> or <i>double</i>
|
Chris@49
|
9475 </li>
|
Chris@49
|
9476 <li>
|
Chris@49
|
9477 log_a, log_b and log_c must have the same type
|
Chris@49
|
9478 </li>
|
Chris@49
|
9479 </ul>
|
Chris@49
|
9480 </li>
|
Chris@49
|
9481 </ul>
|
Chris@49
|
9482 <br>
|
Chris@49
|
9483 <hr class="greyline"><br>
|
Chris@49
|
9484 -->
|
Chris@49
|
9485
|
Chris@49
|
9486 <a name="uword"></a>
|
Chris@49
|
9487 <b>uword</b>, <b>sword</b>
|
Chris@49
|
9488 <ul>
|
Chris@49
|
9489 <li>
|
Chris@49
|
9490 <i>uword</i> is a typedef for an unsigned integer with a minimum width of 32 bits; if <i>ARMA_64BIT_WORD</i> is enabled, the minimum width is 64 bits
|
Chris@49
|
9491 </li>
|
Chris@49
|
9492 <br>
|
Chris@49
|
9493 <li>
|
Chris@49
|
9494 <i>sword</i> is a typedef for a signed integer with a minimum width of 32 bits; if <i>ARMA_64BIT_WORD</i> is enabled, the minimum width is 64 bits
|
Chris@49
|
9495 </li>
|
Chris@49
|
9496 <br>
|
Chris@49
|
9497 <li>
|
Chris@49
|
9498 <a href="#config_hpp_arma_64bit_word"><i>ARMA_64BIT_WORD</i></a> can be enabled via editing <i>include/armadillo_bits/config.hpp</i>
|
Chris@49
|
9499 </li>
|
Chris@49
|
9500 <br>
|
Chris@49
|
9501 <li>See also:
|
Chris@49
|
9502 <ul>
|
Chris@49
|
9503 <li><a href="http://cplusplus.com/doc/tutorial/variables/">C++ variable types</a></li>
|
Chris@49
|
9504 <li><a href="http://www.cplusplus.com/doc/tutorial/other_data_types/">explanation of <i>typedef</i></a></li>
|
Chris@49
|
9505 <li><a href="#Mat">imat & umat</a> matrix types
|
Chris@49
|
9506 <li><a href="#Col">ivec & uvec</a> vector types
|
Chris@49
|
9507 </ul>
|
Chris@49
|
9508 </li>
|
Chris@49
|
9509 <br>
|
Chris@49
|
9510 </ul>
|
Chris@49
|
9511 <hr class="greyline"><br>
|
Chris@49
|
9512
|
Chris@49
|
9513 <a name="cx_float_double"></a>
|
Chris@49
|
9514 <b>cx_float</b>, <b>cx_double</b>
|
Chris@49
|
9515 <ul>
|
Chris@49
|
9516 <li>
|
Chris@49
|
9517 cx_float is a typedef for <i>std::complex<float></i>
|
Chris@49
|
9518 </li>
|
Chris@49
|
9519 <br>
|
Chris@49
|
9520 <li>
|
Chris@49
|
9521 cx_double is a typedef for <i>std::complex<double></i>
|
Chris@49
|
9522 </li>
|
Chris@49
|
9523 <br>
|
Chris@49
|
9524 <li>See also:
|
Chris@49
|
9525 <ul>
|
Chris@49
|
9526 <li><a href="http://cplusplus.com/reference/std/complex/">complex numbers in the standard C++ library</a></li>
|
Chris@49
|
9527 <li><a href="http://www.cplusplus.com/doc/tutorial/other_data_types/">explanation of <i>typedef</i></a></li>
|
Chris@49
|
9528 <li><a href="#Mat">cx_mat</a> matrix type
|
Chris@49
|
9529 <li><a href="#Col">cx_vec</a> vector type
|
Chris@49
|
9530 </ul>
|
Chris@49
|
9531 </li>
|
Chris@49
|
9532 <br>
|
Chris@49
|
9533 </ul>
|
Chris@49
|
9534
|
Chris@49
|
9535 <a name="syntax"></a>
|
Chris@49
|
9536 <hr class="greyline">
|
Chris@49
|
9537 <br>
|
Chris@49
|
9538 <b>
|
Chris@49
|
9539 Examples of Matlab/Octave syntax and conceptually corresponding Armadillo syntax
|
Chris@49
|
9540 </b>
|
Chris@49
|
9541 <br>
|
Chris@49
|
9542 <br>
|
Chris@49
|
9543 <ul>
|
Chris@49
|
9544 <table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
9545 <tbody>
|
Chris@49
|
9546 <tr>
|
Chris@49
|
9547 <td style="vertical-align: top;">
|
Chris@49
|
9548 <b>Matlab/Octave</b>
|
Chris@49
|
9549 </td>
|
Chris@49
|
9550 <td style="vertical-align: top;">
|
Chris@49
|
9551
|
Chris@49
|
9552 </td>
|
Chris@49
|
9553 <td style="vertical-align: top;">
|
Chris@49
|
9554 <b>Armadillo</b>
|
Chris@49
|
9555 </td>
|
Chris@49
|
9556 <td style="vertical-align: top;">
|
Chris@49
|
9557
|
Chris@49
|
9558 </td>
|
Chris@49
|
9559 <td style="vertical-align: top;">
|
Chris@49
|
9560 <b>Notes</b>
|
Chris@49
|
9561 </td>
|
Chris@49
|
9562 </tr>
|
Chris@49
|
9563 <tr>
|
Chris@49
|
9564 <td style="vertical-align: top;">
|
Chris@49
|
9565
|
Chris@49
|
9566 </td>
|
Chris@49
|
9567 <td style="vertical-align: top;">
|
Chris@49
|
9568
|
Chris@49
|
9569 </td>
|
Chris@49
|
9570 <td style="vertical-align: top;">
|
Chris@49
|
9571
|
Chris@49
|
9572 </td>
|
Chris@49
|
9573 <td style="vertical-align: top;">
|
Chris@49
|
9574
|
Chris@49
|
9575 </td>
|
Chris@49
|
9576 <td style="vertical-align: top;">
|
Chris@49
|
9577
|
Chris@49
|
9578 </td>
|
Chris@49
|
9579 </tr>
|
Chris@49
|
9580 <tr>
|
Chris@49
|
9581 <td style="vertical-align: top;">
|
Chris@49
|
9582 A(1, 1)
|
Chris@49
|
9583 </td>
|
Chris@49
|
9584 <td style="vertical-align: top;">
|
Chris@49
|
9585
|
Chris@49
|
9586 </td>
|
Chris@49
|
9587 <td style="vertical-align: top;">
|
Chris@49
|
9588 A(0, 0)
|
Chris@49
|
9589 </td>
|
Chris@49
|
9590 <td style="vertical-align: top;">
|
Chris@49
|
9591
|
Chris@49
|
9592 </td>
|
Chris@49
|
9593 <td style="vertical-align: top;">
|
Chris@49
|
9594 indexing in Armadillo starts at 0
|
Chris@49
|
9595 </td>
|
Chris@49
|
9596 </tr>
|
Chris@49
|
9597 <tr>
|
Chris@49
|
9598 <td style="vertical-align: top;">
|
Chris@49
|
9599 A(k, k)
|
Chris@49
|
9600 </td>
|
Chris@49
|
9601 <td style="vertical-align: top;">
|
Chris@49
|
9602
|
Chris@49
|
9603 </td>
|
Chris@49
|
9604 <td style="vertical-align: top;">
|
Chris@49
|
9605 A(k-1, k-1)
|
Chris@49
|
9606 </td>
|
Chris@49
|
9607 <td style="vertical-align: top;">
|
Chris@49
|
9608
|
Chris@49
|
9609 </td>
|
Chris@49
|
9610 <td style="vertical-align: top;">
|
Chris@49
|
9611
|
Chris@49
|
9612 </td>
|
Chris@49
|
9613 </tr>
|
Chris@49
|
9614 <tr>
|
Chris@49
|
9615 <td style="vertical-align: top;">
|
Chris@49
|
9616
|
Chris@49
|
9617 </td>
|
Chris@49
|
9618 <td style="vertical-align: top;">
|
Chris@49
|
9619
|
Chris@49
|
9620 </td>
|
Chris@49
|
9621 <td style="vertical-align: top;">
|
Chris@49
|
9622
|
Chris@49
|
9623 </td>
|
Chris@49
|
9624 <td style="vertical-align: top;">
|
Chris@49
|
9625
|
Chris@49
|
9626 </td>
|
Chris@49
|
9627 <td style="vertical-align: top;">
|
Chris@49
|
9628
|
Chris@49
|
9629 </td>
|
Chris@49
|
9630 </tr>
|
Chris@49
|
9631 <tr>
|
Chris@49
|
9632 <td style="vertical-align: top;">
|
Chris@49
|
9633 size(A,1)
|
Chris@49
|
9634 </td>
|
Chris@49
|
9635 <td style="vertical-align: top;">
|
Chris@49
|
9636
|
Chris@49
|
9637 </td>
|
Chris@49
|
9638 <td style="vertical-align: top;">
|
Chris@49
|
9639 A<a href="#attributes">.n_rows</a>
|
Chris@49
|
9640 </td>
|
Chris@49
|
9641 <td style="vertical-align: top;">
|
Chris@49
|
9642
|
Chris@49
|
9643 </td>
|
Chris@49
|
9644 <td style="vertical-align: top;">
|
Chris@49
|
9645 read only
|
Chris@49
|
9646 </td>
|
Chris@49
|
9647 </tr>
|
Chris@49
|
9648 <tr>
|
Chris@49
|
9649 <td style="vertical-align: top;">
|
Chris@49
|
9650 size(A,2)
|
Chris@49
|
9651 </td>
|
Chris@49
|
9652 <td style="vertical-align: top;">
|
Chris@49
|
9653
|
Chris@49
|
9654 </td>
|
Chris@49
|
9655 <td style="vertical-align: top;">
|
Chris@49
|
9656 A<a href="#attributes">.n_cols</a>
|
Chris@49
|
9657 </td>
|
Chris@49
|
9658 <td style="vertical-align: top;">
|
Chris@49
|
9659
|
Chris@49
|
9660 </td>
|
Chris@49
|
9661 <td style="vertical-align: top;">
|
Chris@49
|
9662
|
Chris@49
|
9663 </td>
|
Chris@49
|
9664 </tr>
|
Chris@49
|
9665 <tr>
|
Chris@49
|
9666 <td style="vertical-align: top;">
|
Chris@49
|
9667 size(Q,3)
|
Chris@49
|
9668 </td>
|
Chris@49
|
9669 <td style="vertical-align: top;">
|
Chris@49
|
9670
|
Chris@49
|
9671 </td>
|
Chris@49
|
9672 <td style="vertical-align: top;">
|
Chris@49
|
9673 Q<a href="#attributes">.n_slices</a>
|
Chris@49
|
9674 </td>
|
Chris@49
|
9675 <td style="vertical-align: top;">
|
Chris@49
|
9676
|
Chris@49
|
9677 </td>
|
Chris@49
|
9678 <td style="vertical-align: top;">
|
Chris@49
|
9679 Q is a <a href="#Cube">cube</a> (3D array)
|
Chris@49
|
9680 </td>
|
Chris@49
|
9681 </tr>
|
Chris@49
|
9682 <tr>
|
Chris@49
|
9683 <td style="vertical-align: top;">
|
Chris@49
|
9684 numel(A)
|
Chris@49
|
9685 </td>
|
Chris@49
|
9686 <td style="vertical-align: top;">
|
Chris@49
|
9687
|
Chris@49
|
9688 </td>
|
Chris@49
|
9689 <td style="vertical-align: top;">
|
Chris@49
|
9690 A<a href="#attributes">.n_elem</a>
|
Chris@49
|
9691 </td>
|
Chris@49
|
9692 <td style="vertical-align: top;">
|
Chris@49
|
9693
|
Chris@49
|
9694 </td>
|
Chris@49
|
9695 <td style="vertical-align: top;">
|
Chris@49
|
9696
|
Chris@49
|
9697 </td>
|
Chris@49
|
9698 </tr>
|
Chris@49
|
9699 <tr>
|
Chris@49
|
9700 <td style="vertical-align: top;">
|
Chris@49
|
9701
|
Chris@49
|
9702 </td>
|
Chris@49
|
9703 <td style="vertical-align: top;">
|
Chris@49
|
9704
|
Chris@49
|
9705 </td>
|
Chris@49
|
9706 <td style="vertical-align: top;">
|
Chris@49
|
9707
|
Chris@49
|
9708 </td>
|
Chris@49
|
9709 <td style="vertical-align: top;">
|
Chris@49
|
9710
|
Chris@49
|
9711 </td>
|
Chris@49
|
9712 <td style="vertical-align: top;">
|
Chris@49
|
9713
|
Chris@49
|
9714 </td>
|
Chris@49
|
9715 </tr>
|
Chris@49
|
9716 <tr>
|
Chris@49
|
9717 <td style="vertical-align: top;">
|
Chris@49
|
9718 A(:, k)
|
Chris@49
|
9719 </td>
|
Chris@49
|
9720 <td style="vertical-align: top;">
|
Chris@49
|
9721
|
Chris@49
|
9722 </td>
|
Chris@49
|
9723 <td style="vertical-align: top;">
|
Chris@49
|
9724 A<a href="#submat">.col</a>(k)
|
Chris@49
|
9725 </td>
|
Chris@49
|
9726 <td style="vertical-align: top;">
|
Chris@49
|
9727
|
Chris@49
|
9728 </td>
|
Chris@49
|
9729 <td style="vertical-align: top;">
|
Chris@49
|
9730 this is a conceptual example only;
|
Chris@49
|
9731 exact conversion from Matlab/Octave to Armadillo syntax
|
Chris@49
|
9732 will require taking into account that indexing starts at 0
|
Chris@49
|
9733 </td>
|
Chris@49
|
9734 </tr>
|
Chris@49
|
9735 <tr>
|
Chris@49
|
9736 <td style="vertical-align: top;">
|
Chris@49
|
9737 A(k, :)
|
Chris@49
|
9738 </td>
|
Chris@49
|
9739 <td style="vertical-align: top;">
|
Chris@49
|
9740
|
Chris@49
|
9741 </td>
|
Chris@49
|
9742 <td style="vertical-align: top;">
|
Chris@49
|
9743 A<a href="#submat">.row</a>(k)
|
Chris@49
|
9744 </td>
|
Chris@49
|
9745 <td style="vertical-align: top;">
|
Chris@49
|
9746
|
Chris@49
|
9747 </td>
|
Chris@49
|
9748 <td style="vertical-align: top;">
|
Chris@49
|
9749
|
Chris@49
|
9750 </td>
|
Chris@49
|
9751 </tr>
|
Chris@49
|
9752 <tr>
|
Chris@49
|
9753 <td style="vertical-align: top;">
|
Chris@49
|
9754 A(:, p:q)
|
Chris@49
|
9755 </td>
|
Chris@49
|
9756 <td style="vertical-align: top;">
|
Chris@49
|
9757
|
Chris@49
|
9758 </td>
|
Chris@49
|
9759 <td style="vertical-align: top;">
|
Chris@49
|
9760 A<a href="#submat">.cols</a>(p, q)
|
Chris@49
|
9761 </td>
|
Chris@49
|
9762 <td style="vertical-align: top;">
|
Chris@49
|
9763
|
Chris@49
|
9764 </td>
|
Chris@49
|
9765 <td style="vertical-align: top;">
|
Chris@49
|
9766
|
Chris@49
|
9767 </td>
|
Chris@49
|
9768 </tr>
|
Chris@49
|
9769 <tr>
|
Chris@49
|
9770 <td style="vertical-align: top;">
|
Chris@49
|
9771 A(p:q, :)
|
Chris@49
|
9772 </td>
|
Chris@49
|
9773 <td style="vertical-align: top;">
|
Chris@49
|
9774
|
Chris@49
|
9775 </td>
|
Chris@49
|
9776 <td style="vertical-align: top;">
|
Chris@49
|
9777 A<a href="#submat">.rows</a>(p, q)
|
Chris@49
|
9778 </td>
|
Chris@49
|
9779 <td style="vertical-align: top;">
|
Chris@49
|
9780
|
Chris@49
|
9781 </td>
|
Chris@49
|
9782 <td style="vertical-align: top;">
|
Chris@49
|
9783
|
Chris@49
|
9784 </td>
|
Chris@49
|
9785 </tr>
|
Chris@49
|
9786 <tr>
|
Chris@49
|
9787 <td style="vertical-align: top;">
|
Chris@49
|
9788
|
Chris@49
|
9789 </td>
|
Chris@49
|
9790 <td style="vertical-align: top;">
|
Chris@49
|
9791
|
Chris@49
|
9792 </td>
|
Chris@49
|
9793 <td style="vertical-align: top;">
|
Chris@49
|
9794
|
Chris@49
|
9795 </td>
|
Chris@49
|
9796 <td style="vertical-align: top;">
|
Chris@49
|
9797
|
Chris@49
|
9798 </td>
|
Chris@49
|
9799 <td style="vertical-align: top;">
|
Chris@49
|
9800
|
Chris@49
|
9801 </td>
|
Chris@49
|
9802 </tr>
|
Chris@49
|
9803 <tr>
|
Chris@49
|
9804 <td style="vertical-align: top;">
|
Chris@49
|
9805 A(p:q, r:s)
|
Chris@49
|
9806 </td>
|
Chris@49
|
9807 <td style="vertical-align: top;">
|
Chris@49
|
9808
|
Chris@49
|
9809 </td>
|
Chris@49
|
9810 <td style="vertical-align: top;">
|
Chris@49
|
9811 <font size=-1>
|
Chris@49
|
9812 A<a href="#submat">.submat</a>(p, r, q, s)
|
Chris@49
|
9813 </font>
|
Chris@49
|
9814 </td>
|
Chris@49
|
9815 <td style="vertical-align: top;">
|
Chris@49
|
9816
|
Chris@49
|
9817 </td>
|
Chris@49
|
9818 <td style="vertical-align: top;">
|
Chris@49
|
9819 <font size=-1>
|
Chris@49
|
9820 A.submat(first_row, first_col, last_row, last_col)
|
Chris@49
|
9821 </font>
|
Chris@49
|
9822 </td>
|
Chris@49
|
9823 </tr>
|
Chris@49
|
9824 <tr>
|
Chris@49
|
9825 <td style="vertical-align: top;">
|
Chris@49
|
9826
|
Chris@49
|
9827 </td>
|
Chris@49
|
9828 <td style="vertical-align: top;">
|
Chris@49
|
9829
|
Chris@49
|
9830 </td>
|
Chris@49
|
9831 <td style="vertical-align: top;">
|
Chris@49
|
9832 <font size=-1>
|
Chris@49
|
9833 or
|
Chris@49
|
9834 </font>
|
Chris@49
|
9835 </td>
|
Chris@49
|
9836 <td style="vertical-align: top;">
|
Chris@49
|
9837
|
Chris@49
|
9838 </td>
|
Chris@49
|
9839 <td style="vertical-align: top;">
|
Chris@49
|
9840
|
Chris@49
|
9841 </td>
|
Chris@49
|
9842 </tr>
|
Chris@49
|
9843 <tr>
|
Chris@49
|
9844 <td style="vertical-align: top;">
|
Chris@49
|
9845
|
Chris@49
|
9846 </td>
|
Chris@49
|
9847 <td style="vertical-align: top;">
|
Chris@49
|
9848
|
Chris@49
|
9849 </td>
|
Chris@49
|
9850 <td style="vertical-align: top;">
|
Chris@49
|
9851 <font size=-1>
|
Chris@49
|
9852 A( <a href="#submat">span</a>(p,q), <a href="#submat">span</a>(r,s) )
|
Chris@49
|
9853 </font>
|
Chris@49
|
9854 </td>
|
Chris@49
|
9855 <td style="vertical-align: top;">
|
Chris@49
|
9856
|
Chris@49
|
9857 </td>
|
Chris@49
|
9858 <td style="vertical-align: top;">
|
Chris@49
|
9859 <font size=-1>
|
Chris@49
|
9860 A( span(first_row, last_row), span(first_col, last_col) )
|
Chris@49
|
9861 </font>
|
Chris@49
|
9862 </td>
|
Chris@49
|
9863 </tr>
|
Chris@49
|
9864 <tr>
|
Chris@49
|
9865 <td style="vertical-align: top;">
|
Chris@49
|
9866
|
Chris@49
|
9867 </td>
|
Chris@49
|
9868 <td style="vertical-align: top;">
|
Chris@49
|
9869
|
Chris@49
|
9870 </td>
|
Chris@49
|
9871 <td style="vertical-align: top;">
|
Chris@49
|
9872
|
Chris@49
|
9873 </td>
|
Chris@49
|
9874 <td style="vertical-align: top;">
|
Chris@49
|
9875
|
Chris@49
|
9876 </td>
|
Chris@49
|
9877 <td style="vertical-align: top;">
|
Chris@49
|
9878
|
Chris@49
|
9879 </td>
|
Chris@49
|
9880 </tr>
|
Chris@49
|
9881 <tr>
|
Chris@49
|
9882 <td style="vertical-align: top;">
|
Chris@49
|
9883 Q(:, :, k)
|
Chris@49
|
9884 </td>
|
Chris@49
|
9885 <td style="vertical-align: top;">
|
Chris@49
|
9886
|
Chris@49
|
9887 </td>
|
Chris@49
|
9888 <td style="vertical-align: top;">
|
Chris@49
|
9889 Q<a href="#subcube">.slice</a>(k)
|
Chris@49
|
9890 </td>
|
Chris@49
|
9891 <td style="vertical-align: top;">
|
Chris@49
|
9892
|
Chris@49
|
9893 </td>
|
Chris@49
|
9894 <td style="vertical-align: top;">
|
Chris@49
|
9895 Q is a <a href="#Cube">cube</a> (3D array)
|
Chris@49
|
9896 </td>
|
Chris@49
|
9897 </tr>
|
Chris@49
|
9898 <tr>
|
Chris@49
|
9899 <td style="vertical-align: top;">
|
Chris@49
|
9900 Q(:, :, t:u)
|
Chris@49
|
9901 </td>
|
Chris@49
|
9902 <td style="vertical-align: top;">
|
Chris@49
|
9903
|
Chris@49
|
9904 </td>
|
Chris@49
|
9905 <td style="vertical-align: top;">
|
Chris@49
|
9906 Q<a href="#subcube">.slices</a>(t, u)
|
Chris@49
|
9907 </td>
|
Chris@49
|
9908 <td style="vertical-align: top;">
|
Chris@49
|
9909
|
Chris@49
|
9910 </td>
|
Chris@49
|
9911 <td style="vertical-align: top;">
|
Chris@49
|
9912
|
Chris@49
|
9913 </td>
|
Chris@49
|
9914 </tr>
|
Chris@49
|
9915 <tr>
|
Chris@49
|
9916 <td style="vertical-align: top;">
|
Chris@49
|
9917
|
Chris@49
|
9918 </td>
|
Chris@49
|
9919 <td style="vertical-align: top;">
|
Chris@49
|
9920
|
Chris@49
|
9921 </td>
|
Chris@49
|
9922 <td style="vertical-align: top;">
|
Chris@49
|
9923
|
Chris@49
|
9924 </td>
|
Chris@49
|
9925 <td style="vertical-align: top;">
|
Chris@49
|
9926
|
Chris@49
|
9927 </td>
|
Chris@49
|
9928 <td style="vertical-align: top;">
|
Chris@49
|
9929
|
Chris@49
|
9930 </td>
|
Chris@49
|
9931 </tr>
|
Chris@49
|
9932 <tr>
|
Chris@49
|
9933 <td style="vertical-align: top;">
|
Chris@49
|
9934 Q(p:q, r:s, t:u)
|
Chris@49
|
9935 </td>
|
Chris@49
|
9936 <td style="vertical-align: top;">
|
Chris@49
|
9937
|
Chris@49
|
9938 </td>
|
Chris@49
|
9939 <td style="vertical-align: top;">
|
Chris@49
|
9940 <font size=-1>
|
Chris@49
|
9941 Q<a href="#subcube">.subcube</a>(p, r, t, q, s, u)
|
Chris@49
|
9942 </font>
|
Chris@49
|
9943 </td>
|
Chris@49
|
9944 <td style="vertical-align: top;">
|
Chris@49
|
9945
|
Chris@49
|
9946 </td>
|
Chris@49
|
9947 <td style="vertical-align: top;">
|
Chris@49
|
9948 <font size=-1>
|
Chris@49
|
9949 .subcube(first_row, first_col, first_slice, last_row, last_col, last_slice)
|
Chris@49
|
9950 </font>
|
Chris@49
|
9951 </td>
|
Chris@49
|
9952 </tr>
|
Chris@49
|
9953 <tr>
|
Chris@49
|
9954 <td style="vertical-align: top;">
|
Chris@49
|
9955
|
Chris@49
|
9956 </td>
|
Chris@49
|
9957 <td style="vertical-align: top;">
|
Chris@49
|
9958
|
Chris@49
|
9959 </td>
|
Chris@49
|
9960 <td style="vertical-align: top;">
|
Chris@49
|
9961 <font size=-1>
|
Chris@49
|
9962 or
|
Chris@49
|
9963 </font>
|
Chris@49
|
9964 </td>
|
Chris@49
|
9965 <td style="vertical-align: top;">
|
Chris@49
|
9966
|
Chris@49
|
9967 </td>
|
Chris@49
|
9968 <td style="vertical-align: top;">
|
Chris@49
|
9969
|
Chris@49
|
9970 </td>
|
Chris@49
|
9971 </tr>
|
Chris@49
|
9972 <tr>
|
Chris@49
|
9973 <td style="vertical-align: top;">
|
Chris@49
|
9974
|
Chris@49
|
9975 </td>
|
Chris@49
|
9976 <td style="vertical-align: top;">
|
Chris@49
|
9977
|
Chris@49
|
9978 </td>
|
Chris@49
|
9979 <td style="vertical-align: top;">
|
Chris@49
|
9980 <font size=-1>
|
Chris@49
|
9981 Q( <a href="#subcube">span</a>(p,q), <a href="#subcube">span</a>(r,s), <a href="#subcube">span</a>(t,u) )
|
Chris@49
|
9982 </font>
|
Chris@49
|
9983 </td>
|
Chris@49
|
9984 <td style="vertical-align: top;">
|
Chris@49
|
9985
|
Chris@49
|
9986 </td>
|
Chris@49
|
9987 <td style="vertical-align: top;">
|
Chris@49
|
9988
|
Chris@49
|
9989 </td>
|
Chris@49
|
9990 </tr>
|
Chris@49
|
9991 <tr>
|
Chris@49
|
9992 <td style="vertical-align: top;">
|
Chris@49
|
9993
|
Chris@49
|
9994 </td>
|
Chris@49
|
9995 <td style="vertical-align: top;">
|
Chris@49
|
9996
|
Chris@49
|
9997 </td>
|
Chris@49
|
9998 <td style="vertical-align: top;">
|
Chris@49
|
9999
|
Chris@49
|
10000 </td>
|
Chris@49
|
10001 <td style="vertical-align: top;">
|
Chris@49
|
10002
|
Chris@49
|
10003 </td>
|
Chris@49
|
10004 <td style="vertical-align: top;">
|
Chris@49
|
10005
|
Chris@49
|
10006 </td>
|
Chris@49
|
10007 </tr>
|
Chris@49
|
10008 <tr>
|
Chris@49
|
10009 <td style="vertical-align: top;">
|
Chris@49
|
10010 A'
|
Chris@49
|
10011 </td>
|
Chris@49
|
10012 <td style="vertical-align: top;">
|
Chris@49
|
10013
|
Chris@49
|
10014 </td>
|
Chris@49
|
10015 <td style="vertical-align: top;">
|
Chris@49
|
10016 A<a href="#t_st_members">.t()</a> or <a href="#trans">trans</a>(A)
|
Chris@49
|
10017 </td>
|
Chris@49
|
10018 <td style="vertical-align: top;">
|
Chris@49
|
10019
|
Chris@49
|
10020 </td>
|
Chris@49
|
10021 <td style="vertical-align: top;">
|
Chris@49
|
10022 matrix transpose / Hermitian transpose
|
Chris@49
|
10023 <br>
|
Chris@49
|
10024 (for complex matrices, the conjugate of each element is taken)
|
Chris@49
|
10025 </td>
|
Chris@49
|
10026 </tr>
|
Chris@49
|
10027 <tr>
|
Chris@49
|
10028 <td style="vertical-align: top;">
|
Chris@49
|
10029 A.'
|
Chris@49
|
10030 </td>
|
Chris@49
|
10031 <td style="vertical-align: top;">
|
Chris@49
|
10032
|
Chris@49
|
10033 </td>
|
Chris@49
|
10034 <td style="vertical-align: top;">
|
Chris@49
|
10035 A<a href="#t_st_members">.st()</a> or <a href="#strans">strans</a>(A)
|
Chris@49
|
10036 </td>
|
Chris@49
|
10037 <td style="vertical-align: top;">
|
Chris@49
|
10038
|
Chris@49
|
10039 </td>
|
Chris@49
|
10040 <td style="vertical-align: top;">
|
Chris@49
|
10041 simple matrix transpose
|
Chris@49
|
10042 <br>
|
Chris@49
|
10043 (for complex matrices, the conjugate of each element is not taken)
|
Chris@49
|
10044 </td>
|
Chris@49
|
10045 </tr>
|
Chris@49
|
10046 <tr>
|
Chris@49
|
10047 <td style="vertical-align: top;">
|
Chris@49
|
10048
|
Chris@49
|
10049 </td>
|
Chris@49
|
10050 <td style="vertical-align: top;">
|
Chris@49
|
10051
|
Chris@49
|
10052 </td>
|
Chris@49
|
10053 <td style="vertical-align: top;">
|
Chris@49
|
10054
|
Chris@49
|
10055 </td>
|
Chris@49
|
10056 <td style="vertical-align: top;">
|
Chris@49
|
10057
|
Chris@49
|
10058 </td>
|
Chris@49
|
10059 <td style="vertical-align: top;">
|
Chris@49
|
10060
|
Chris@49
|
10061 </td>
|
Chris@49
|
10062 </tr>
|
Chris@49
|
10063 <tr>
|
Chris@49
|
10064 <td style="vertical-align: top;">
|
Chris@49
|
10065 A = zeros(size(A))
|
Chris@49
|
10066 </td>
|
Chris@49
|
10067 <td style="vertical-align: top;">
|
Chris@49
|
10068
|
Chris@49
|
10069 </td>
|
Chris@49
|
10070 <td style="vertical-align: top;">
|
Chris@49
|
10071 A<a href="#zeros_member">.zeros()</a>
|
Chris@49
|
10072 </td>
|
Chris@49
|
10073 <td style="vertical-align: top;">
|
Chris@49
|
10074
|
Chris@49
|
10075 </td>
|
Chris@49
|
10076 <td style="vertical-align: top;">
|
Chris@49
|
10077
|
Chris@49
|
10078 </td>
|
Chris@49
|
10079 </tr>
|
Chris@49
|
10080 <tr>
|
Chris@49
|
10081 <td style="vertical-align: top;">
|
Chris@49
|
10082 A = ones(size(A))
|
Chris@49
|
10083 </td>
|
Chris@49
|
10084 <td style="vertical-align: top;">
|
Chris@49
|
10085
|
Chris@49
|
10086 </td>
|
Chris@49
|
10087 <td style="vertical-align: top;">
|
Chris@49
|
10088 A.<a href="#ones_member">ones()</a>
|
Chris@49
|
10089 </td>
|
Chris@49
|
10090 <td style="vertical-align: top;">
|
Chris@49
|
10091
|
Chris@49
|
10092 </td>
|
Chris@49
|
10093 <td style="vertical-align: top;">
|
Chris@49
|
10094
|
Chris@49
|
10095 </td>
|
Chris@49
|
10096 </tr>
|
Chris@49
|
10097 <tr>
|
Chris@49
|
10098 <td style="vertical-align: top;">
|
Chris@49
|
10099 A = zeros(k)
|
Chris@49
|
10100 </td>
|
Chris@49
|
10101 <td style="vertical-align: top;">
|
Chris@49
|
10102
|
Chris@49
|
10103 </td>
|
Chris@49
|
10104 <td style="vertical-align: top;">
|
Chris@49
|
10105 A = <a href="#zeros_standalone">zeros</a><mat>(k,k)
|
Chris@49
|
10106 </td>
|
Chris@49
|
10107 <td style="vertical-align: top;">
|
Chris@49
|
10108
|
Chris@49
|
10109 </td>
|
Chris@49
|
10110 <td style="vertical-align: top;">
|
Chris@49
|
10111
|
Chris@49
|
10112 </td>
|
Chris@49
|
10113 </tr>
|
Chris@49
|
10114 <tr>
|
Chris@49
|
10115 <td style="vertical-align: top;">
|
Chris@49
|
10116 A = ones(k)
|
Chris@49
|
10117 </td>
|
Chris@49
|
10118 <td style="vertical-align: top;">
|
Chris@49
|
10119
|
Chris@49
|
10120 </td>
|
Chris@49
|
10121 <td style="vertical-align: top;">
|
Chris@49
|
10122 A = <a href="#ones_standalone">ones</a><mat>(k,k)
|
Chris@49
|
10123 </td>
|
Chris@49
|
10124 <td style="vertical-align: top;">
|
Chris@49
|
10125
|
Chris@49
|
10126 </td>
|
Chris@49
|
10127 <td style="vertical-align: top;">
|
Chris@49
|
10128
|
Chris@49
|
10129 </td>
|
Chris@49
|
10130 </tr>
|
Chris@49
|
10131 <tr>
|
Chris@49
|
10132 <td style="vertical-align: top;">
|
Chris@49
|
10133
|
Chris@49
|
10134 </td>
|
Chris@49
|
10135 <td style="vertical-align: top;">
|
Chris@49
|
10136
|
Chris@49
|
10137 </td>
|
Chris@49
|
10138 <td style="vertical-align: top;">
|
Chris@49
|
10139
|
Chris@49
|
10140 </td>
|
Chris@49
|
10141 <td style="vertical-align: top;">
|
Chris@49
|
10142
|
Chris@49
|
10143 </td>
|
Chris@49
|
10144 <td style="vertical-align: top;">
|
Chris@49
|
10145
|
Chris@49
|
10146 </td>
|
Chris@49
|
10147 </tr>
|
Chris@49
|
10148 <tr>
|
Chris@49
|
10149 <td style="vertical-align: top;">
|
Chris@49
|
10150 C = complex(A,B)
|
Chris@49
|
10151 </td>
|
Chris@49
|
10152 <td style="vertical-align: top;">
|
Chris@49
|
10153
|
Chris@49
|
10154 </td>
|
Chris@49
|
10155 <td style="vertical-align: top;">
|
Chris@49
|
10156 cx_mat C = <a href="#Mat">cx_mat</a>(A,B)
|
Chris@49
|
10157 </td>
|
Chris@49
|
10158 <td style="vertical-align: top;">
|
Chris@49
|
10159
|
Chris@49
|
10160 </td>
|
Chris@49
|
10161 <td style="vertical-align: top;">
|
Chris@49
|
10162
|
Chris@49
|
10163 </td>
|
Chris@49
|
10164 </tr>
|
Chris@49
|
10165 <tr>
|
Chris@49
|
10166 <td style="vertical-align: top;">
|
Chris@49
|
10167
|
Chris@49
|
10168 </td>
|
Chris@49
|
10169 <td style="vertical-align: top;">
|
Chris@49
|
10170
|
Chris@49
|
10171 </td>
|
Chris@49
|
10172 <td style="vertical-align: top;">
|
Chris@49
|
10173
|
Chris@49
|
10174 </td>
|
Chris@49
|
10175 <td style="vertical-align: top;">
|
Chris@49
|
10176
|
Chris@49
|
10177 </td>
|
Chris@49
|
10178 <td style="vertical-align: top;">
|
Chris@49
|
10179
|
Chris@49
|
10180 </td>
|
Chris@49
|
10181 </tr>
|
Chris@49
|
10182 <tr>
|
Chris@49
|
10183 <td style="vertical-align: top;">
|
Chris@49
|
10184 A .* B
|
Chris@49
|
10185 </td>
|
Chris@49
|
10186 <td style="vertical-align: top;">
|
Chris@49
|
10187
|
Chris@49
|
10188 </td>
|
Chris@49
|
10189 <td style="vertical-align: top;">
|
Chris@49
|
10190 A % B
|
Chris@49
|
10191 </td>
|
Chris@49
|
10192 <td style="vertical-align: top;">
|
Chris@49
|
10193
|
Chris@49
|
10194 </td>
|
Chris@49
|
10195 <td style="vertical-align: top;">
|
Chris@49
|
10196 <a href="#operators">element-wise multiplication</a>
|
Chris@49
|
10197 </td>
|
Chris@49
|
10198 </tr>
|
Chris@49
|
10199 <tr>
|
Chris@49
|
10200 <td style="vertical-align: top;">
|
Chris@49
|
10201 A ./ B
|
Chris@49
|
10202 </td>
|
Chris@49
|
10203 <td style="vertical-align: top;">
|
Chris@49
|
10204
|
Chris@49
|
10205 </td>
|
Chris@49
|
10206 <td style="vertical-align: top;">
|
Chris@49
|
10207 A / B
|
Chris@49
|
10208 </td>
|
Chris@49
|
10209 <td style="vertical-align: top;">
|
Chris@49
|
10210
|
Chris@49
|
10211 </td>
|
Chris@49
|
10212 <td style="vertical-align: top;">
|
Chris@49
|
10213 <a href="#operators">element-wise division</a>
|
Chris@49
|
10214 </td>
|
Chris@49
|
10215 </tr>
|
Chris@49
|
10216 <tr>
|
Chris@49
|
10217 <td style="vertical-align: top;">
|
Chris@49
|
10218 A \ B
|
Chris@49
|
10219 </td>
|
Chris@49
|
10220 <td style="vertical-align: top;">
|
Chris@49
|
10221
|
Chris@49
|
10222 </td>
|
Chris@49
|
10223 <td style="vertical-align: top;">
|
Chris@49
|
10224 <a href="#solve">solve</a>(A,B)
|
Chris@49
|
10225 </td>
|
Chris@49
|
10226 <td style="vertical-align: top;">
|
Chris@49
|
10227
|
Chris@49
|
10228 </td>
|
Chris@49
|
10229 <td style="vertical-align: top;">
|
Chris@49
|
10230 conceptually similar to <a href="#inv">inv</a>(A)*B, but more efficient
|
Chris@49
|
10231 </td>
|
Chris@49
|
10232 </tr>
|
Chris@49
|
10233 <tr>
|
Chris@49
|
10234 <td style="vertical-align: top;">
|
Chris@49
|
10235 A = A + 1;
|
Chris@49
|
10236 </td>
|
Chris@49
|
10237 <td style="vertical-align: top;">
|
Chris@49
|
10238
|
Chris@49
|
10239 </td>
|
Chris@49
|
10240 <td style="vertical-align: top;">
|
Chris@49
|
10241 A++
|
Chris@49
|
10242 </td>
|
Chris@49
|
10243 <td style="vertical-align: top;">
|
Chris@49
|
10244
|
Chris@49
|
10245 </td>
|
Chris@49
|
10246 <td style="vertical-align: top;">
|
Chris@49
|
10247
|
Chris@49
|
10248 </td>
|
Chris@49
|
10249 </tr>
|
Chris@49
|
10250 <tr>
|
Chris@49
|
10251 <td style="vertical-align: top;">
|
Chris@49
|
10252 A = A - 1;
|
Chris@49
|
10253 </td>
|
Chris@49
|
10254 <td style="vertical-align: top;">
|
Chris@49
|
10255
|
Chris@49
|
10256 </td>
|
Chris@49
|
10257 <td style="vertical-align: top;">
|
Chris@49
|
10258 A--
|
Chris@49
|
10259 </td>
|
Chris@49
|
10260 <td style="vertical-align: top;">
|
Chris@49
|
10261
|
Chris@49
|
10262 </td>
|
Chris@49
|
10263 <td style="vertical-align: top;">
|
Chris@49
|
10264
|
Chris@49
|
10265 </td>
|
Chris@49
|
10266 </tr>
|
Chris@49
|
10267 <tr>
|
Chris@49
|
10268 <td style="vertical-align: top;">
|
Chris@49
|
10269
|
Chris@49
|
10270 </td>
|
Chris@49
|
10271 <td style="vertical-align: top;">
|
Chris@49
|
10272
|
Chris@49
|
10273 </td>
|
Chris@49
|
10274 <td style="vertical-align: top;">
|
Chris@49
|
10275
|
Chris@49
|
10276 </td>
|
Chris@49
|
10277 <td style="vertical-align: top;">
|
Chris@49
|
10278
|
Chris@49
|
10279 </td>
|
Chris@49
|
10280 <td style="vertical-align: top;">
|
Chris@49
|
10281
|
Chris@49
|
10282 </td>
|
Chris@49
|
10283 </tr>
|
Chris@49
|
10284 <tr>
|
Chris@49
|
10285 <td style="vertical-align: top;">
|
Chris@49
|
10286 A = [ 1 2; 3 4; ]
|
Chris@49
|
10287 </td>
|
Chris@49
|
10288 <td style="vertical-align: top;">
|
Chris@49
|
10289
|
Chris@49
|
10290 </td>
|
Chris@49
|
10291 <td style="vertical-align: top;">
|
Chris@49
|
10292 A <font size=-1><<</font> 1 <font size=-1><<</font> 2 <font size=-1><<</font> endr<br>
|
Chris@49
|
10293 <font size=-1><<</font> 3 <font size=-1><<</font> 4 <font size=-1><<</font> endr;
|
Chris@49
|
10294 </td>
|
Chris@49
|
10295 <td style="vertical-align: top;">
|
Chris@49
|
10296
|
Chris@49
|
10297 </td>
|
Chris@49
|
10298 <td style="vertical-align: top;">
|
Chris@49
|
10299 <a href="#element_initialisation">element initialisation</a>,
|
Chris@49
|
10300 with special element <i>endr</i> indicating <i>end of row</i>
|
Chris@49
|
10301 </td>
|
Chris@49
|
10302 </tr>
|
Chris@49
|
10303 <tr>
|
Chris@49
|
10304 <td style="vertical-align: top;">
|
Chris@49
|
10305
|
Chris@49
|
10306 </td>
|
Chris@49
|
10307 <td style="vertical-align: top;">
|
Chris@49
|
10308
|
Chris@49
|
10309 </td>
|
Chris@49
|
10310 <td style="vertical-align: top;">
|
Chris@49
|
10311
|
Chris@49
|
10312 </td>
|
Chris@49
|
10313 <td style="vertical-align: top;">
|
Chris@49
|
10314
|
Chris@49
|
10315 </td>
|
Chris@49
|
10316 <td style="vertical-align: top;">
|
Chris@49
|
10317
|
Chris@49
|
10318 </td>
|
Chris@49
|
10319 </tr>
|
Chris@49
|
10320 <tr>
|
Chris@49
|
10321 <td style="vertical-align: top;">
|
Chris@49
|
10322 X = [ A B ]
|
Chris@49
|
10323 </td>
|
Chris@49
|
10324 <td style="vertical-align: top;">
|
Chris@49
|
10325
|
Chris@49
|
10326 </td>
|
Chris@49
|
10327 <td style="vertical-align: top;">
|
Chris@49
|
10328 X = <a href="#join">join_rows</a>(A,B)
|
Chris@49
|
10329 </td>
|
Chris@49
|
10330 <td style="vertical-align: top;">
|
Chris@49
|
10331
|
Chris@49
|
10332 </td>
|
Chris@49
|
10333 <td style="vertical-align: top;">
|
Chris@49
|
10334
|
Chris@49
|
10335 </td>
|
Chris@49
|
10336 </tr>
|
Chris@49
|
10337 <tr>
|
Chris@49
|
10338 <td style="vertical-align: top;">
|
Chris@49
|
10339 X = [ A; B ]
|
Chris@49
|
10340 </td>
|
Chris@49
|
10341 <td style="vertical-align: top;">
|
Chris@49
|
10342
|
Chris@49
|
10343 </td>
|
Chris@49
|
10344 <td style="vertical-align: top;">
|
Chris@49
|
10345 X = <a href="#join">join_cols</a>(A,B)
|
Chris@49
|
10346 </td>
|
Chris@49
|
10347 <td style="vertical-align: top;">
|
Chris@49
|
10348
|
Chris@49
|
10349 </td>
|
Chris@49
|
10350 <td style="vertical-align: top;">
|
Chris@49
|
10351
|
Chris@49
|
10352 </td>
|
Chris@49
|
10353 </tr>
|
Chris@49
|
10354 <tr>
|
Chris@49
|
10355 <td style="vertical-align: top;">
|
Chris@49
|
10356
|
Chris@49
|
10357 </td>
|
Chris@49
|
10358 <td style="vertical-align: top;">
|
Chris@49
|
10359
|
Chris@49
|
10360 </td>
|
Chris@49
|
10361 <td style="vertical-align: top;">
|
Chris@49
|
10362
|
Chris@49
|
10363 </td>
|
Chris@49
|
10364 <td style="vertical-align: top;">
|
Chris@49
|
10365
|
Chris@49
|
10366 </td>
|
Chris@49
|
10367 <td style="vertical-align: top;">
|
Chris@49
|
10368
|
Chris@49
|
10369 </td>
|
Chris@49
|
10370 </tr>
|
Chris@49
|
10371 <tr>
|
Chris@49
|
10372 <td style="vertical-align: top;">
|
Chris@49
|
10373 A
|
Chris@49
|
10374 </td>
|
Chris@49
|
10375 <td style="vertical-align: top;">
|
Chris@49
|
10376
|
Chris@49
|
10377 </td>
|
Chris@49
|
10378 <td style="vertical-align: top;">
|
Chris@49
|
10379 cout <font size=-1><<</font> A <font size=-1><<</font> endl;
|
Chris@49
|
10380 <br>or
|
Chris@49
|
10381 <br>A<a href="#print">.print</a>("A =");
|
Chris@49
|
10382 </td>
|
Chris@49
|
10383 <td style="vertical-align: top;">
|
Chris@49
|
10384
|
Chris@49
|
10385 </td>
|
Chris@49
|
10386 <td style="vertical-align: top;">
|
Chris@49
|
10387
|
Chris@49
|
10388 </td>
|
Chris@49
|
10389 </tr>
|
Chris@49
|
10390 <tr>
|
Chris@49
|
10391 <td style="vertical-align: top;">
|
Chris@49
|
10392
|
Chris@49
|
10393 </td>
|
Chris@49
|
10394 <td style="vertical-align: top;">
|
Chris@49
|
10395
|
Chris@49
|
10396 </td>
|
Chris@49
|
10397 <td style="vertical-align: top;">
|
Chris@49
|
10398
|
Chris@49
|
10399 </td>
|
Chris@49
|
10400 <td style="vertical-align: top;">
|
Chris@49
|
10401
|
Chris@49
|
10402 </td>
|
Chris@49
|
10403 <td style="vertical-align: top;">
|
Chris@49
|
10404
|
Chris@49
|
10405 </td>
|
Chris@49
|
10406 </tr>
|
Chris@49
|
10407 <tr>
|
Chris@49
|
10408 <td style="vertical-align: top;">
|
Chris@49
|
10409 save -ascii 'A.dat' A
|
Chris@49
|
10410 </td>
|
Chris@49
|
10411 <td style="vertical-align: top;">
|
Chris@49
|
10412
|
Chris@49
|
10413 </td>
|
Chris@49
|
10414 <td style="vertical-align: top;">
|
Chris@49
|
10415 A<a href="#save_load_mat">.save</a>("A.dat", raw_ascii);
|
Chris@49
|
10416 </td>
|
Chris@49
|
10417 <td style="vertical-align: top;">
|
Chris@49
|
10418
|
Chris@49
|
10419 </td>
|
Chris@49
|
10420 <td style="vertical-align: top;">
|
Chris@49
|
10421 Matlab/Octave matrices saved as ascii are readable by Armadillo (and vice-versa)
|
Chris@49
|
10422 </td>
|
Chris@49
|
10423 </tr>
|
Chris@49
|
10424 <tr>
|
Chris@49
|
10425 <td style="vertical-align: top;">
|
Chris@49
|
10426 load -ascii 'A.dat'
|
Chris@49
|
10427 </td>
|
Chris@49
|
10428 <td style="vertical-align: top;">
|
Chris@49
|
10429
|
Chris@49
|
10430 </td>
|
Chris@49
|
10431 <td style="vertical-align: top;">
|
Chris@49
|
10432 A<a href="#save_load_mat">.load</a>("A.dat", raw_ascii);
|
Chris@49
|
10433 </td>
|
Chris@49
|
10434 <td style="vertical-align: top;">
|
Chris@49
|
10435
|
Chris@49
|
10436 </td>
|
Chris@49
|
10437 <td style="vertical-align: top;">
|
Chris@49
|
10438
|
Chris@49
|
10439 </td>
|
Chris@49
|
10440 </tr>
|
Chris@49
|
10441 <tr>
|
Chris@49
|
10442 <td style="vertical-align: top;">
|
Chris@49
|
10443
|
Chris@49
|
10444 </td>
|
Chris@49
|
10445 <td style="vertical-align: top;">
|
Chris@49
|
10446
|
Chris@49
|
10447 </td>
|
Chris@49
|
10448 <td style="vertical-align: top;">
|
Chris@49
|
10449
|
Chris@49
|
10450 </td>
|
Chris@49
|
10451 <td style="vertical-align: top;">
|
Chris@49
|
10452
|
Chris@49
|
10453 </td>
|
Chris@49
|
10454 <td style="vertical-align: top;">
|
Chris@49
|
10455
|
Chris@49
|
10456 </td>
|
Chris@49
|
10457 </tr>
|
Chris@49
|
10458 <tr>
|
Chris@49
|
10459 <td style="vertical-align: top;">
|
Chris@49
|
10460 S = { 'abc'; 'def' }
|
Chris@49
|
10461 </td>
|
Chris@49
|
10462 <td style="vertical-align: top;">
|
Chris@49
|
10463
|
Chris@49
|
10464 </td>
|
Chris@49
|
10465 <td style="vertical-align: top;">
|
Chris@49
|
10466 <a href="#field">field</a><std::string> S(2);
|
Chris@49
|
10467 <br>S(0) = "abc";
|
Chris@49
|
10468 <br>S(1) = "def";
|
Chris@49
|
10469 </td>
|
Chris@49
|
10470 <td style="vertical-align: top;">
|
Chris@49
|
10471
|
Chris@49
|
10472 </td>
|
Chris@49
|
10473 <td style="vertical-align: top;">
|
Chris@49
|
10474 <a href="#field">fields</a> can store arbitrary objects, in a 1D or 2D layout
|
Chris@49
|
10475 </td>
|
Chris@49
|
10476 </tr>
|
Chris@49
|
10477 </tbody>
|
Chris@49
|
10478 </table>
|
Chris@49
|
10479 </ul>
|
Chris@49
|
10480 <br>
|
Chris@49
|
10481
|
Chris@49
|
10482 <a name="example_prog"></a>
|
Chris@49
|
10483 <hr class="greyline">
|
Chris@49
|
10484 <br>
|
Chris@49
|
10485 <b>example program</b>
|
Chris@49
|
10486 <br>
|
Chris@49
|
10487 <br>
|
Chris@49
|
10488 <ul>
|
Chris@49
|
10489 <li>
|
Chris@49
|
10490 If you save the program below as <i>example.cpp</i>,
|
Chris@49
|
10491 under Linux you can compile it using:
|
Chris@49
|
10492 <br>
|
Chris@49
|
10493 g++ example.cpp -o example -O1 -larmadillo
|
Chris@49
|
10494 </li>
|
Chris@49
|
10495 <ul>
|
Chris@49
|
10496 <pre>
|
Chris@49
|
10497 #include <iostream>
|
Chris@49
|
10498 #include <armadillo>
|
Chris@49
|
10499
|
Chris@49
|
10500 using namespace std;
|
Chris@49
|
10501 using namespace arma;
|
Chris@49
|
10502
|
Chris@49
|
10503 int main(int argc, char** argv)
|
Chris@49
|
10504 {
|
Chris@49
|
10505 mat A = randu<mat>(4,5);
|
Chris@49
|
10506 mat B = randu<mat>(4,5);
|
Chris@49
|
10507
|
Chris@49
|
10508 cout << A*B.t() << endl;
|
Chris@49
|
10509
|
Chris@49
|
10510 return 0;
|
Chris@49
|
10511 }
|
Chris@49
|
10512 </pre>
|
Chris@49
|
10513 </ul>
|
Chris@49
|
10514 <li>
|
Chris@49
|
10515 You may also want to have a look at the example programs that come with the Armadillo archive.
|
Chris@49
|
10516 </li>
|
Chris@49
|
10517 <br>
|
Chris@49
|
10518 <li>
|
Chris@49
|
10519 As Armadillo is a template library, we strongly recommended to have optimisation enabled when compiling programs
|
Chris@49
|
10520 (eg. when compiling with GCC, use the -O1 or -O2 options).
|
Chris@49
|
10521 </li>
|
Chris@49
|
10522 </ul>
|
Chris@49
|
10523 <br>
|
Chris@49
|
10524
|
Chris@49
|
10525
|
Chris@49
|
10526
|
Chris@49
|
10527 <a name="config_hpp"></a>
|
Chris@49
|
10528 <hr class="greyline">
|
Chris@49
|
10529 <br>
|
Chris@49
|
10530 <b>config.hpp</b>
|
Chris@49
|
10531 <br>
|
Chris@49
|
10532 <br>
|
Chris@49
|
10533 <ul>
|
Chris@49
|
10534 <li>
|
Chris@49
|
10535 Armadillo can be configured via editing the file <i>include/armadillo_bits/config.hpp</i>.
|
Chris@49
|
10536 Specific functionality can be enabled or disabled by uncommenting or commenting out a particular <i>#define</i>, listed below.
|
Chris@49
|
10537 <br>
|
Chris@49
|
10538 <br>
|
Chris@49
|
10539 <table style="text-align: left;" border="0" cellpadding="2" cellspacing="2">
|
Chris@49
|
10540 <tbody>
|
Chris@49
|
10541 <tr>
|
Chris@49
|
10542 <td style="vertical-align: top;">
|
Chris@49
|
10543 ARMA_USE_LAPACK
|
Chris@49
|
10544 </td>
|
Chris@49
|
10545 <td style="vertical-align: top;">
|
Chris@49
|
10546
|
Chris@49
|
10547 </td>
|
Chris@49
|
10548 <td style="vertical-align: top;">
|
Chris@49
|
10549 Enable the use of LAPACK, or a high-speed replacement for LAPACK (eg. Intel MKL, AMD ACML or the Accelerate framework).
|
Chris@49
|
10550 Armadillo requires LAPACK for functions such as <a href="#svd">svd()</a>, <a href="#inv">inv()</a>, <a href="#eig_sym">eig_sym()</a>, <a href="#solve">solve()</a>, etc.
|
Chris@49
|
10551 </td>
|
Chris@49
|
10552 </tr>
|
Chris@49
|
10553 <tr>
|
Chris@49
|
10554 <td style="vertical-align: top;">
|
Chris@49
|
10555
|
Chris@49
|
10556 </td>
|
Chris@49
|
10557 <td style="vertical-align: top;">
|
Chris@49
|
10558
|
Chris@49
|
10559 </td>
|
Chris@49
|
10560 <td style="vertical-align: top;">
|
Chris@49
|
10561
|
Chris@49
|
10562 </td>
|
Chris@49
|
10563 <td style="vertical-align: top;">
|
Chris@49
|
10564
|
Chris@49
|
10565 </td>
|
Chris@49
|
10566 <td style="vertical-align: top;">
|
Chris@49
|
10567
|
Chris@49
|
10568 </td>
|
Chris@49
|
10569 </tr>
|
Chris@49
|
10570 <tr>
|
Chris@49
|
10571 <td style="vertical-align: top;">
|
Chris@49
|
10572 ARMA_USE_BLAS
|
Chris@49
|
10573 </td>
|
Chris@49
|
10574 <td style="vertical-align: top;">
|
Chris@49
|
10575
|
Chris@49
|
10576 </td>
|
Chris@49
|
10577 <td style="vertical-align: top;">
|
Chris@49
|
10578 Enable the use of BLAS, or a high-speed replacement for BLAS (eg. OpenBLAS, Intel MKL, AMD ACML or the Accelerate framework).
|
Chris@49
|
10579 BLAS is used for <a href="#operators">matrix multiplication</a>.
|
Chris@49
|
10580 Without BLAS, Armadillo will use a built-in matrix multiplication routine, which might be slower for large matrices.
|
Chris@49
|
10581 <!--However, if you're using 64 bit operating system with 32 bit BLAS, it's better to disable the use of BLAS.-->
|
Chris@49
|
10582 </td>
|
Chris@49
|
10583 </tr>
|
Chris@49
|
10584 <tr>
|
Chris@49
|
10585 <td style="vertical-align: top;">
|
Chris@49
|
10586
|
Chris@49
|
10587 </td>
|
Chris@49
|
10588 <td style="vertical-align: top;">
|
Chris@49
|
10589
|
Chris@49
|
10590 </td>
|
Chris@49
|
10591 <td style="vertical-align: top;">
|
Chris@49
|
10592
|
Chris@49
|
10593 </td>
|
Chris@49
|
10594 <td style="vertical-align: top;">
|
Chris@49
|
10595
|
Chris@49
|
10596 </td>
|
Chris@49
|
10597 <td style="vertical-align: top;">
|
Chris@49
|
10598
|
Chris@49
|
10599 </td>
|
Chris@49
|
10600 </tr>
|
Chris@49
|
10601 <tr>
|
Chris@49
|
10602 <td style="vertical-align: top;">
|
Chris@49
|
10603 ARMA_BLAS_CAPITALS
|
Chris@49
|
10604 </td>
|
Chris@49
|
10605 <td style="vertical-align: top;">
|
Chris@49
|
10606
|
Chris@49
|
10607 </td>
|
Chris@49
|
10608 <td style="vertical-align: top;">
|
Chris@49
|
10609 Use capitalised (uppercase) BLAS and LAPACK function names (eg. DGEMM vs dgemm)
|
Chris@49
|
10610 </td>
|
Chris@49
|
10611 </tr>
|
Chris@49
|
10612 <tr>
|
Chris@49
|
10613 <td style="vertical-align: top;">
|
Chris@49
|
10614
|
Chris@49
|
10615 </td>
|
Chris@49
|
10616 <td style="vertical-align: top;">
|
Chris@49
|
10617
|
Chris@49
|
10618 </td>
|
Chris@49
|
10619 <td style="vertical-align: top;">
|
Chris@49
|
10620
|
Chris@49
|
10621 </td>
|
Chris@49
|
10622 <td style="vertical-align: top;">
|
Chris@49
|
10623
|
Chris@49
|
10624 </td>
|
Chris@49
|
10625 <td style="vertical-align: top;">
|
Chris@49
|
10626
|
Chris@49
|
10627 </td>
|
Chris@49
|
10628 </tr>
|
Chris@49
|
10629 <tr>
|
Chris@49
|
10630 <td style="vertical-align: top;">
|
Chris@49
|
10631 ARMA_BLAS_UNDERSCORE
|
Chris@49
|
10632 </td>
|
Chris@49
|
10633 <td style="vertical-align: top;">
|
Chris@49
|
10634
|
Chris@49
|
10635 </td>
|
Chris@49
|
10636 <td style="vertical-align: top;">
|
Chris@49
|
10637 Append an underscore to BLAS and LAPACK function names (eg. dgemm_ vs dgemm). Enabled by default.
|
Chris@49
|
10638 </td>
|
Chris@49
|
10639 </tr>
|
Chris@49
|
10640 <tr>
|
Chris@49
|
10641 <td style="vertical-align: top;">
|
Chris@49
|
10642
|
Chris@49
|
10643 </td>
|
Chris@49
|
10644 <td style="vertical-align: top;">
|
Chris@49
|
10645
|
Chris@49
|
10646 </td>
|
Chris@49
|
10647 <td style="vertical-align: top;">
|
Chris@49
|
10648
|
Chris@49
|
10649 </td>
|
Chris@49
|
10650 <td style="vertical-align: top;">
|
Chris@49
|
10651
|
Chris@49
|
10652 </td>
|
Chris@49
|
10653 <td style="vertical-align: top;">
|
Chris@49
|
10654
|
Chris@49
|
10655 </td>
|
Chris@49
|
10656 </tr>
|
Chris@49
|
10657 <tr>
|
Chris@49
|
10658 <td style="vertical-align: top;">
|
Chris@49
|
10659 ARMA_BLAS_LONG
|
Chris@49
|
10660 </td>
|
Chris@49
|
10661 <td style="vertical-align: top;">
|
Chris@49
|
10662
|
Chris@49
|
10663 </td>
|
Chris@49
|
10664 <td style="vertical-align: top;">
|
Chris@49
|
10665 Use "long" instead of "int" when calling BLAS and LAPACK functions
|
Chris@49
|
10666 </td>
|
Chris@49
|
10667 </tr>
|
Chris@49
|
10668 <tr>
|
Chris@49
|
10669 <td style="vertical-align: top;">
|
Chris@49
|
10670
|
Chris@49
|
10671 </td>
|
Chris@49
|
10672 <td style="vertical-align: top;">
|
Chris@49
|
10673
|
Chris@49
|
10674 </td>
|
Chris@49
|
10675 <td style="vertical-align: top;">
|
Chris@49
|
10676
|
Chris@49
|
10677 </td>
|
Chris@49
|
10678 <td style="vertical-align: top;">
|
Chris@49
|
10679
|
Chris@49
|
10680 </td>
|
Chris@49
|
10681 <td style="vertical-align: top;">
|
Chris@49
|
10682
|
Chris@49
|
10683 </td>
|
Chris@49
|
10684 </tr>
|
Chris@49
|
10685 <tr>
|
Chris@49
|
10686 <td style="vertical-align: top;">
|
Chris@49
|
10687 ARMA_BLAS_LONG_LONG
|
Chris@49
|
10688 </td>
|
Chris@49
|
10689 <td style="vertical-align: top;">
|
Chris@49
|
10690
|
Chris@49
|
10691 </td>
|
Chris@49
|
10692 <td style="vertical-align: top;">
|
Chris@49
|
10693 Use "long long" instead of "int" when calling BLAS and LAPACK functions
|
Chris@49
|
10694 </td>
|
Chris@49
|
10695 </tr>
|
Chris@49
|
10696 <tr>
|
Chris@49
|
10697 <td style="vertical-align: top;">
|
Chris@49
|
10698
|
Chris@49
|
10699 </td>
|
Chris@49
|
10700 <td style="vertical-align: top;">
|
Chris@49
|
10701
|
Chris@49
|
10702 </td>
|
Chris@49
|
10703 <td style="vertical-align: top;">
|
Chris@49
|
10704
|
Chris@49
|
10705 </td>
|
Chris@49
|
10706 <td style="vertical-align: top;">
|
Chris@49
|
10707
|
Chris@49
|
10708 </td>
|
Chris@49
|
10709 <td style="vertical-align: top;">
|
Chris@49
|
10710
|
Chris@49
|
10711 </td>
|
Chris@49
|
10712 </tr>
|
Chris@49
|
10713 <tr>
|
Chris@49
|
10714 <td style="vertical-align: top;">
|
Chris@49
|
10715 ARMA_USE_TBB_ALLOC
|
Chris@49
|
10716 </td>
|
Chris@49
|
10717 <td style="vertical-align: top;">
|
Chris@49
|
10718
|
Chris@49
|
10719 </td>
|
Chris@49
|
10720 <td style="vertical-align: top;">
|
Chris@49
|
10721 Use Intel TBB <i>scalable_malloc()</i> and <i>scalable_free()</i> instead of standard <i>new[]</i> and <i>delete[]</i> for managing matrix memory
|
Chris@49
|
10722 </td>
|
Chris@49
|
10723 </tr>
|
Chris@49
|
10724 <tr>
|
Chris@49
|
10725 <td style="vertical-align: top;">
|
Chris@49
|
10726
|
Chris@49
|
10727 </td>
|
Chris@49
|
10728 <td style="vertical-align: top;">
|
Chris@49
|
10729
|
Chris@49
|
10730 </td>
|
Chris@49
|
10731 <td style="vertical-align: top;">
|
Chris@49
|
10732
|
Chris@49
|
10733 </td>
|
Chris@49
|
10734 <td style="vertical-align: top;">
|
Chris@49
|
10735
|
Chris@49
|
10736 </td>
|
Chris@49
|
10737 <td style="vertical-align: top;">
|
Chris@49
|
10738
|
Chris@49
|
10739 </td>
|
Chris@49
|
10740 </tr>
|
Chris@49
|
10741 <tr>
|
Chris@49
|
10742 <td style="vertical-align: top;">
|
Chris@49
|
10743 ARMA_USE_MKL_ALLOC
|
Chris@49
|
10744 </td>
|
Chris@49
|
10745 <td style="vertical-align: top;">
|
Chris@49
|
10746
|
Chris@49
|
10747 </td>
|
Chris@49
|
10748 <td style="vertical-align: top;">
|
Chris@49
|
10749 Use Intel MKL <i>mkl_malloc()</i> and <i>mkl_free()</i> instead of standard <i>new[]</i> and <i>delete[]</i> for managing matrix memory
|
Chris@49
|
10750 </td>
|
Chris@49
|
10751 </tr>
|
Chris@49
|
10752 <tr>
|
Chris@49
|
10753 <td style="vertical-align: top;">
|
Chris@49
|
10754
|
Chris@49
|
10755 </td>
|
Chris@49
|
10756 <td style="vertical-align: top;">
|
Chris@49
|
10757
|
Chris@49
|
10758 </td>
|
Chris@49
|
10759 <td style="vertical-align: top;">
|
Chris@49
|
10760
|
Chris@49
|
10761 </td>
|
Chris@49
|
10762 <td style="vertical-align: top;">
|
Chris@49
|
10763
|
Chris@49
|
10764 </td>
|
Chris@49
|
10765 <td style="vertical-align: top;">
|
Chris@49
|
10766
|
Chris@49
|
10767 </td>
|
Chris@49
|
10768 </tr>
|
Chris@49
|
10769 <tr>
|
Chris@49
|
10770 <td style="vertical-align: top;">
|
Chris@49
|
10771 <a name="config_hpp_arma_64bit_word"></a>
|
Chris@49
|
10772 ARMA_64BIT_WORD
|
Chris@49
|
10773 </td>
|
Chris@49
|
10774 <td style="vertical-align: top;">
|
Chris@49
|
10775
|
Chris@49
|
10776 </td>
|
Chris@49
|
10777 <td style="vertical-align: top;">
|
Chris@49
|
10778 Use 64 bit integers. Useful if you require matrices/vectors capable of holding more than 4 billion elements.
|
Chris@49
|
10779 Your machine and compiler must have support for 64 bit integers (eg. via "long" or "long long").
|
Chris@49
|
10780 This can also be enabled by adding <i>#define ARMA_64BIT_WORD</i> before each instance of <i>#include <armadillo></i>.
|
Chris@49
|
10781 </td>
|
Chris@49
|
10782 </tr>
|
Chris@49
|
10783 <tr>
|
Chris@49
|
10784 <td style="vertical-align: top;">
|
Chris@49
|
10785
|
Chris@49
|
10786 </td>
|
Chris@49
|
10787 <td style="vertical-align: top;">
|
Chris@49
|
10788
|
Chris@49
|
10789 </td>
|
Chris@49
|
10790 <td style="vertical-align: top;">
|
Chris@49
|
10791
|
Chris@49
|
10792 </td>
|
Chris@49
|
10793 <td style="vertical-align: top;">
|
Chris@49
|
10794
|
Chris@49
|
10795 </td>
|
Chris@49
|
10796 <td style="vertical-align: top;">
|
Chris@49
|
10797
|
Chris@49
|
10798 </td>
|
Chris@49
|
10799 </tr>
|
Chris@49
|
10800 <tr>
|
Chris@49
|
10801 <td style="vertical-align: top;">
|
Chris@49
|
10802 <a name="config_hpp_arma_use_cxx11"></a>
|
Chris@49
|
10803 ARMA_USE_CXX11
|
Chris@49
|
10804 </td>
|
Chris@49
|
10805 <td style="vertical-align: top;">
|
Chris@49
|
10806
|
Chris@49
|
10807 </td>
|
Chris@49
|
10808 <td style="vertical-align: top;">
|
Chris@49
|
10809 Use C++11 features, such as <a href="#element_initialisation">initialiser lists</a>
|
Chris@49
|
10810 </td>
|
Chris@49
|
10811 </tr>
|
Chris@49
|
10812 <tr>
|
Chris@49
|
10813 <td style="vertical-align: top;">
|
Chris@49
|
10814
|
Chris@49
|
10815 </td>
|
Chris@49
|
10816 <td style="vertical-align: top;">
|
Chris@49
|
10817
|
Chris@49
|
10818 </td>
|
Chris@49
|
10819 <td style="vertical-align: top;">
|
Chris@49
|
10820
|
Chris@49
|
10821 </td>
|
Chris@49
|
10822 <td style="vertical-align: top;">
|
Chris@49
|
10823
|
Chris@49
|
10824 </td>
|
Chris@49
|
10825 <td style="vertical-align: top;">
|
Chris@49
|
10826
|
Chris@49
|
10827 </td>
|
Chris@49
|
10828 </tr>
|
Chris@49
|
10829 <tr>
|
Chris@49
|
10830 <td style="vertical-align: top;">
|
Chris@49
|
10831 ARMA_USE_HDF5
|
Chris@49
|
10832 </td>
|
Chris@49
|
10833 <td style="vertical-align: top;">
|
Chris@49
|
10834
|
Chris@49
|
10835 </td>
|
Chris@49
|
10836 <td style="vertical-align: top;">
|
Chris@49
|
10837 Enable the the ability to <a href="#save_load_mat">save and load</a> matrices stored in the HDF5 format;
|
Chris@49
|
10838 the <i>hdf5.h</i> header file must be available on your system and you will need to link with the hdf5 library (eg. -lhdf5)
|
Chris@49
|
10839 </td>
|
Chris@49
|
10840 </tr>
|
Chris@49
|
10841 <tr>
|
Chris@49
|
10842 <td style="vertical-align: top;">
|
Chris@49
|
10843
|
Chris@49
|
10844 </td>
|
Chris@49
|
10845 <td style="vertical-align: top;">
|
Chris@49
|
10846
|
Chris@49
|
10847 </td>
|
Chris@49
|
10848 <td style="vertical-align: top;">
|
Chris@49
|
10849
|
Chris@49
|
10850 </td>
|
Chris@49
|
10851 <td style="vertical-align: top;">
|
Chris@49
|
10852
|
Chris@49
|
10853 </td>
|
Chris@49
|
10854 <td style="vertical-align: top;">
|
Chris@49
|
10855
|
Chris@49
|
10856 </td>
|
Chris@49
|
10857 </tr>
|
Chris@49
|
10858 <tr>
|
Chris@49
|
10859 <td style="vertical-align: top;">
|
Chris@49
|
10860 <a name="config_hpp_arma_no_debug"></a>
|
Chris@49
|
10861 ARMA_NO_DEBUG
|
Chris@49
|
10862 </td>
|
Chris@49
|
10863 <td style="vertical-align: top;">
|
Chris@49
|
10864
|
Chris@49
|
10865 </td>
|
Chris@49
|
10866 <td style="vertical-align: top;">
|
Chris@49
|
10867 Disable all run-time checks, such as <a href="#element_access">bounds checking</a>.
|
Chris@49
|
10868 This will result in faster code, but you first need to make sure that your code runs correctly!
|
Chris@49
|
10869 We strongly recommend to have the run-time checks enabled during development,
|
Chris@49
|
10870 as this greatly aids in finding mistakes in your code, and hence speeds up development.
|
Chris@49
|
10871 We recommend that run-time checks be disabled <b>only</b> for the shipped version of your program.
|
Chris@49
|
10872 </td>
|
Chris@49
|
10873 </tr>
|
Chris@49
|
10874 <tr>
|
Chris@49
|
10875 <td style="vertical-align: top;">
|
Chris@49
|
10876
|
Chris@49
|
10877 </td>
|
Chris@49
|
10878 <td style="vertical-align: top;">
|
Chris@49
|
10879
|
Chris@49
|
10880 </td>
|
Chris@49
|
10881 <td style="vertical-align: top;">
|
Chris@49
|
10882
|
Chris@49
|
10883 </td>
|
Chris@49
|
10884 <td style="vertical-align: top;">
|
Chris@49
|
10885
|
Chris@49
|
10886 </td>
|
Chris@49
|
10887 <td style="vertical-align: top;">
|
Chris@49
|
10888
|
Chris@49
|
10889 </td>
|
Chris@49
|
10890 </tr>
|
Chris@49
|
10891 <tr>
|
Chris@49
|
10892 <td style="vertical-align: top;">
|
Chris@49
|
10893 ARMA_EXTRA_DEBUG
|
Chris@49
|
10894 </td>
|
Chris@49
|
10895 <td style="vertical-align: top;">
|
Chris@49
|
10896
|
Chris@49
|
10897 </td>
|
Chris@49
|
10898 <td style="vertical-align: top;">
|
Chris@49
|
10899 Print out the trace of internal functions used for evaluating expressions.
|
Chris@49
|
10900 Not recommended for normal use.
|
Chris@49
|
10901 This is mainly useful for debugging the library.
|
Chris@49
|
10902 </td>
|
Chris@49
|
10903 </tr>
|
Chris@49
|
10904 <tr>
|
Chris@49
|
10905 <td style="vertical-align: top;">
|
Chris@49
|
10906
|
Chris@49
|
10907 </td>
|
Chris@49
|
10908 <td style="vertical-align: top;">
|
Chris@49
|
10909
|
Chris@49
|
10910 </td>
|
Chris@49
|
10911 <td style="vertical-align: top;">
|
Chris@49
|
10912
|
Chris@49
|
10913 </td>
|
Chris@49
|
10914 <td style="vertical-align: top;">
|
Chris@49
|
10915
|
Chris@49
|
10916 </td>
|
Chris@49
|
10917 <td style="vertical-align: top;">
|
Chris@49
|
10918
|
Chris@49
|
10919 </td>
|
Chris@49
|
10920 </tr>
|
Chris@49
|
10921 <tr>
|
Chris@49
|
10922 <td style="vertical-align: top;">
|
Chris@49
|
10923 ARMA_MAT_PREALLOC
|
Chris@49
|
10924 </td>
|
Chris@49
|
10925 <td style="vertical-align: top;">
|
Chris@49
|
10926
|
Chris@49
|
10927 </td>
|
Chris@49
|
10928 <td style="vertical-align: top;">
|
Chris@49
|
10929 The number of preallocated elements used by matrices and vectors.
|
Chris@49
|
10930 Must be always enabled and set to an integer that is at least 1.
|
Chris@49
|
10931 By default set to 16.
|
Chris@49
|
10932 If you mainly use lots of very small vectors (eg. ≤ 4 elements), change the number to the size of your vectors.
|
Chris@49
|
10933 </td>
|
Chris@49
|
10934 </tr>
|
Chris@49
|
10935 <tr>
|
Chris@49
|
10936 <td style="vertical-align: top;">
|
Chris@49
|
10937
|
Chris@49
|
10938 </td>
|
Chris@49
|
10939 <td style="vertical-align: top;">
|
Chris@49
|
10940
|
Chris@49
|
10941 </td>
|
Chris@49
|
10942 <td style="vertical-align: top;">
|
Chris@49
|
10943
|
Chris@49
|
10944 </td>
|
Chris@49
|
10945 <td style="vertical-align: top;">
|
Chris@49
|
10946
|
Chris@49
|
10947 </td>
|
Chris@49
|
10948 <td style="vertical-align: top;">
|
Chris@49
|
10949
|
Chris@49
|
10950 </td>
|
Chris@49
|
10951 </tr>
|
Chris@49
|
10952 <tr>
|
Chris@49
|
10953 <td style="vertical-align: top;">
|
Chris@49
|
10954 ARMA_DEFAULT_OSTREAM
|
Chris@49
|
10955 </td>
|
Chris@49
|
10956 <td style="vertical-align: top;">
|
Chris@49
|
10957
|
Chris@49
|
10958 </td>
|
Chris@49
|
10959 <td style="vertical-align: top;">
|
Chris@49
|
10960 The default stream used for printing <a href="#logging">error messages</a> and by <a href="#print">.print()</a>.
|
Chris@49
|
10961 Must be always enabled.
|
Chris@49
|
10962 By default this is set to <i>std::cout</i>
|
Chris@49
|
10963 </td>
|
Chris@49
|
10964 </tr>
|
Chris@49
|
10965 <tr>
|
Chris@49
|
10966 <td style="vertical-align: top;">
|
Chris@49
|
10967
|
Chris@49
|
10968 </td>
|
Chris@49
|
10969 <td style="vertical-align: top;">
|
Chris@49
|
10970
|
Chris@49
|
10971 </td>
|
Chris@49
|
10972 <td style="vertical-align: top;">
|
Chris@49
|
10973
|
Chris@49
|
10974 </td>
|
Chris@49
|
10975 <td style="vertical-align: top;">
|
Chris@49
|
10976
|
Chris@49
|
10977 </td>
|
Chris@49
|
10978 <td style="vertical-align: top;">
|
Chris@49
|
10979
|
Chris@49
|
10980 </td>
|
Chris@49
|
10981 </tr>
|
Chris@49
|
10982 <tr>
|
Chris@49
|
10983 <td style="vertical-align: top;">
|
Chris@49
|
10984 ARMA_DONT_USE_LAPACK
|
Chris@49
|
10985 </td>
|
Chris@49
|
10986 <td style="vertical-align: top;">
|
Chris@49
|
10987
|
Chris@49
|
10988 </td>
|
Chris@49
|
10989 <td style="vertical-align: top;">
|
Chris@49
|
10990 Disable use of LAPACK. Overrides <i>ARMA_USE_LAPACK</i>
|
Chris@49
|
10991 </td>
|
Chris@49
|
10992 </tr>
|
Chris@49
|
10993 <tr>
|
Chris@49
|
10994 <td style="vertical-align: top;">
|
Chris@49
|
10995
|
Chris@49
|
10996 </td>
|
Chris@49
|
10997 <td style="vertical-align: top;">
|
Chris@49
|
10998
|
Chris@49
|
10999 </td>
|
Chris@49
|
11000 <td style="vertical-align: top;">
|
Chris@49
|
11001
|
Chris@49
|
11002 </td>
|
Chris@49
|
11003 <td style="vertical-align: top;">
|
Chris@49
|
11004
|
Chris@49
|
11005 </td>
|
Chris@49
|
11006 <td style="vertical-align: top;">
|
Chris@49
|
11007
|
Chris@49
|
11008 </td>
|
Chris@49
|
11009 </tr>
|
Chris@49
|
11010 <tr>
|
Chris@49
|
11011 <td style="vertical-align: top;">
|
Chris@49
|
11012 ARMA_DONT_USE_BLAS
|
Chris@49
|
11013 </td>
|
Chris@49
|
11014 <td style="vertical-align: top;">
|
Chris@49
|
11015
|
Chris@49
|
11016 </td>
|
Chris@49
|
11017 <td style="vertical-align: top;">
|
Chris@49
|
11018 Disable use of BLAS. Overrides <i>ARMA_USE_BLAS</i>
|
Chris@49
|
11019 </td>
|
Chris@49
|
11020 </tr>
|
Chris@49
|
11021 <tr>
|
Chris@49
|
11022 <td style="vertical-align: top;">
|
Chris@49
|
11023
|
Chris@49
|
11024 </td>
|
Chris@49
|
11025 <td style="vertical-align: top;">
|
Chris@49
|
11026
|
Chris@49
|
11027 </td>
|
Chris@49
|
11028 <td style="vertical-align: top;">
|
Chris@49
|
11029
|
Chris@49
|
11030 </td>
|
Chris@49
|
11031 <td style="vertical-align: top;">
|
Chris@49
|
11032
|
Chris@49
|
11033 </td>
|
Chris@49
|
11034 <td style="vertical-align: top;">
|
Chris@49
|
11035
|
Chris@49
|
11036 </td>
|
Chris@49
|
11037 </tr>
|
Chris@49
|
11038 </tbody>
|
Chris@49
|
11039 </table>
|
Chris@49
|
11040 </li>
|
Chris@49
|
11041
|
Chris@49
|
11042 <br>
|
Chris@49
|
11043 <li>
|
Chris@49
|
11044 See also:
|
Chris@49
|
11045 <ul>
|
Chris@49
|
11046 <li><a href="#logging">logging of warnings and errors</a></li>
|
Chris@49
|
11047 <li><a href="#element_access">element access</a></li>
|
Chris@49
|
11048 <li><a href="#element_initialisation">element initialisation</a></li>
|
Chris@49
|
11049 <li><a href="#uword">uword/sword</a></li>
|
Chris@49
|
11050 </ul>
|
Chris@49
|
11051 </li>
|
Chris@49
|
11052 <br>
|
Chris@49
|
11053 </ul>
|
Chris@49
|
11054 <br>
|
Chris@49
|
11055
|
Chris@49
|
11056
|
Chris@49
|
11057
|
Chris@49
|
11058 <!--
|
Chris@49
|
11059 <a name="catching_exceptions"></a>
|
Chris@49
|
11060 <hr class="greyline">
|
Chris@49
|
11061 <br>
|
Chris@49
|
11062 <b>how to catch std::runtime_error exceptions</b>
|
Chris@49
|
11063 <br>
|
Chris@49
|
11064 <br>
|
Chris@49
|
11065 <ul>
|
Chris@49
|
11066 <li>
|
Chris@49
|
11067 If a function such as <a href="#inv">inv()</a> fails to find a solution,
|
Chris@49
|
11068 an error message is printed and a <i>std::runtime_error</i> exception is thrown.
|
Chris@49
|
11069 If the exception is not caught, the program typically terminates.
|
Chris@49
|
11070 Below is an example of how to catch exceptions:
|
Chris@49
|
11071 <ul>
|
Chris@49
|
11072 <pre>
|
Chris@49
|
11073 #include <iostream>
|
Chris@49
|
11074 #include <armadillo>
|
Chris@49
|
11075
|
Chris@49
|
11076 using namespace std;
|
Chris@49
|
11077 using namespace arma;
|
Chris@49
|
11078
|
Chris@49
|
11079 int main(int argc, char** argv)
|
Chris@49
|
11080 {
|
Chris@49
|
11081 // create a non-invertible matrix
|
Chris@49
|
11082 mat A = zeros<mat>(5,5);
|
Chris@49
|
11083
|
Chris@49
|
11084 mat B;
|
Chris@49
|
11085
|
Chris@49
|
11086 try
|
Chris@49
|
11087 {
|
Chris@49
|
11088 B = inv(A);
|
Chris@49
|
11089 }
|
Chris@49
|
11090 catch (std::runtime_error& x)
|
Chris@49
|
11091 {
|
Chris@49
|
11092 cout << "caught an exception" << endl;
|
Chris@49
|
11093 }
|
Chris@49
|
11094
|
Chris@49
|
11095 return 0;
|
Chris@49
|
11096 }
|
Chris@49
|
11097 </pre>
|
Chris@49
|
11098 </ul>
|
Chris@49
|
11099 <li>
|
Chris@49
|
11100 See also:
|
Chris@49
|
11101 <ul>
|
Chris@49
|
11102 <li><a href="#logging">logging of warnings and errors</a></li>
|
Chris@49
|
11103 <li><a href="http://cplusplus.com/doc/tutorial/exceptions/">tutorial on exceptions</a></li>
|
Chris@49
|
11104 <li><a href="http://cplusplus.com/reference/std/stdexcept/runtime_error/">std::runtime_error</a></li>
|
Chris@49
|
11105 </ul>
|
Chris@49
|
11106 </li>
|
Chris@49
|
11107 <br>
|
Chris@49
|
11108 </ul>
|
Chris@49
|
11109 <br>
|
Chris@49
|
11110 -->
|
Chris@49
|
11111
|
Chris@49
|
11112 <a name="api_additions"></a>
|
Chris@49
|
11113 <a name="api_changes"></a>
|
Chris@49
|
11114 <hr class="greyline">
|
Chris@49
|
11115 <br>
|
Chris@49
|
11116 <b>API Additions, Changes and Deprecations</b>
|
Chris@49
|
11117 <br>
|
Chris@49
|
11118 <br>
|
Chris@49
|
11119 <li>API and Version Policy
|
Chris@49
|
11120 <ul>
|
Chris@49
|
11121 <li>
|
Chris@49
|
11122 Armadillo's version number is X.Y.Z, where X is a major version, Y is a minor version, and Z is the patch level (indicating bug fixes).
|
Chris@49
|
11123 </li>
|
Chris@49
|
11124 <br>
|
Chris@49
|
11125 <li>
|
Chris@49
|
11126 Within each major version (eg. 3.x), minor versions with an even number (eg. 3.2) are backwards compatible with earlier even minor versions (eg. 3.0).
|
Chris@49
|
11127 For example, code written for version 3.0 will work with version 3.2.
|
Chris@49
|
11128 However, as each minor version may have more features (ie. API extensions) than earlier versions,
|
Chris@49
|
11129 code specifically written for version 3.2 doesn't necessarily work with 3.0.
|
Chris@49
|
11130 </li>
|
Chris@49
|
11131 <br>
|
Chris@49
|
11132 <li>
|
Chris@49
|
11133 An odd minor version number (eg. 3.3) indicates an experimental version.
|
Chris@49
|
11134 Experimental versions are generally faster and have more functionality,
|
Chris@49
|
11135 but their APIs have not been finalised yet.
|
Chris@49
|
11136 </li>
|
Chris@49
|
11137 <br>
|
Chris@49
|
11138 <li>
|
Chris@49
|
11139 In general, we don't like changes to existing APIs and prefer not to break any user software.
|
Chris@49
|
11140 However, to allow evolution and help code maintenance, we reserve the right to change the APIs in future major versions of Armadillo,
|
Chris@49
|
11141 while remaining backwards compatible wherever possible
|
Chris@49
|
11142 (eg. 4.0 may have slightly different APIs than 3.x).
|
Chris@49
|
11143 Also, in a rare instance the user API may need to be altered if a bug fix absolutely requires it.
|
Chris@49
|
11144 </li>
|
Chris@49
|
11145 </ul>
|
Chris@49
|
11146 </li>
|
Chris@49
|
11147
|
Chris@49
|
11148 <!--
|
Chris@49
|
11149 <br>
|
Chris@49
|
11150 <li>
|
Chris@49
|
11151 <a name="deprecated"></a>
|
Chris@49
|
11152 List of deprecated functionality; this functionality will be <b>removed</b> in version 4.0:
|
Chris@49
|
11153 <ul>
|
Chris@49
|
11154 <li>
|
Chris@49
|
11155 ...
|
Chris@49
|
11156 </li>
|
Chris@49
|
11157 </ul>
|
Chris@49
|
11158 </li>
|
Chris@49
|
11159 -->
|
Chris@49
|
11160
|
Chris@49
|
11161 <br>
|
Chris@49
|
11162 <br>
|
Chris@49
|
11163 <li>
|
Chris@49
|
11164 List of additions and changes for each version:
|
Chris@49
|
11165 <br>
|
Chris@49
|
11166 <br>
|
Chris@49
|
11167 <ul>
|
Chris@49
|
11168 <a name="added_in_3900"></a>
|
Chris@49
|
11169 <li>Added in 3.900:
|
Chris@49
|
11170 <ul>
|
Chris@49
|
11171 <li>automatic SSE2 vectorisation of elementary expressions (eg. matrix addition) when using GCC 4.7+ with -O3 optimisation</li>
|
Chris@49
|
11172 <li>faster <a href="#stats_fns">median()</a></li>
|
Chris@49
|
11173 <li>faster handling of compound expressions with transposes of <a href="#submat">submatrix</a> rows</li>
|
Chris@49
|
11174 <li>faster handling of compound expressions with transposes of complex vectors</li>
|
Chris@49
|
11175 <li>added support for <a href="#save_load_mat">saving & loading</a> of <a href="#Cube">cubes</a> in HDF5 format</li>
|
Chris@49
|
11176 </ul>
|
Chris@49
|
11177 </li>
|
Chris@49
|
11178 <br>
|
Chris@49
|
11179 <a name="added_in_3820"></a>
|
Chris@49
|
11180 <li>Added in 3.820:
|
Chris@49
|
11181 <ul>
|
Chris@49
|
11182 <li>faster <a href="#as_scalar">as_scalar()</a> for compound expressions</li>
|
Chris@49
|
11183 <li>faster transpose of small vectors</li>
|
Chris@49
|
11184 <li>faster matrix-vector product for small vectors</li>
|
Chris@49
|
11185 <li>faster multiplication of small <a href="#adv_constructors_mat_fixed">fixed size matrices</a></li>
|
Chris@49
|
11186 </ul>
|
Chris@49
|
11187 </li>
|
Chris@49
|
11188 <br>
|
Chris@49
|
11189 <a name="added_in_3810"></a>
|
Chris@49
|
11190 <li>Added in 3.810:
|
Chris@49
|
11191 <ul>
|
Chris@49
|
11192 <li>fast Fourier transform: <a href="#fft">fft()</a></li>
|
Chris@49
|
11193 <li>handling of <a href="#imbue">.imbue()</a> and <a href="#transform">.transform()</a> by submatrices and subcubes</li>
|
Chris@49
|
11194 <li><a href="#batch_constructors_sp_mat">batch insertion constructors</a> for sparse matrices
|
Chris@49
|
11195 </ul>
|
Chris@49
|
11196 </li>
|
Chris@49
|
11197 <br>
|
Chris@49
|
11198 <a name="added_in_3800"></a>
|
Chris@49
|
11199 <li>Added in 3.800:
|
Chris@49
|
11200 <ul>
|
Chris@49
|
11201 <li><a href="#imbue">.imbue()</a> for filling a matrix/cube with values provided by a functor or lambda expression</li>
|
Chris@49
|
11202 <li><a href="#swap">.swap()</a> for swapping contents with another matrix</li>
|
Chris@49
|
11203 <li><a href="#transform">.transform()</a> for transforming a matrix/cube using a functor or lambda expression</li>
|
Chris@49
|
11204 <li><a href="#misc_fns">round()</a> for rounding matrix elements towards nearest integer</li>
|
Chris@49
|
11205 <li>faster <a href="#find">find()</a></li>
|
Chris@49
|
11206 </ul>
|
Chris@49
|
11207 </li>
|
Chris@49
|
11208 <br>
|
Chris@49
|
11209 <li>Changed in 3.800:
|
Chris@49
|
11210 <ul>
|
Chris@49
|
11211 <li>Armadillo is now licensed using the <a href="http://www.mozilla.org/MPL/2.0/">Mozilla Public License 2.0</a>;
|
Chris@49
|
11212 <br>
|
Chris@49
|
11213 see also the associated <a href="http://www.mozilla.org/MPL/2.0/FAQ.html">frequently asked questions</a> about the license</li>
|
Chris@49
|
11214 </ul>
|
Chris@49
|
11215 <br>
|
Chris@49
|
11216 </li>
|
Chris@49
|
11217 <a name="added_in_36"></a>
|
Chris@49
|
11218 <li>Added in 3.6:
|
Chris@49
|
11219 <ul>
|
Chris@49
|
11220 <li>faster handling of compound expressions with submatrices and subcubes</li>
|
Chris@49
|
11221 <li>faster <a href="#trace">trace()</a></li>
|
Chris@49
|
11222 <li>support for loading matrices as text files with <i>NaN</i> and <i>Inf</i> elements</li>
|
Chris@49
|
11223 <li><a href="#sort_index">stable_sort_index()</a>, which preserves the relative order of elements with equivalent values</li>
|
Chris@49
|
11224 <li>handling of <a href="#SpMat">sparse matrices</a> by <a href="#stats_fns">mean()</a>, <a href="#stats_fns">var()</a>, <a href="#norm">norm()</a>, <a href="#abs">abs()</a>, <a href="#misc_fns">square()</a>, <a href="#misc_fns">sqrt()</a></li>
|
Chris@49
|
11225 <li>saving and loading of sparse matrices in <i>arma_binary</i> format</li>
|
Chris@49
|
11226 </ul>
|
Chris@49
|
11227 <br>
|
Chris@49
|
11228 </li>
|
Chris@49
|
11229 <a name="added_in_34"></a>
|
Chris@49
|
11230 <li>Added in 3.4:
|
Chris@49
|
11231 <ul>
|
Chris@49
|
11232 <li>economical QR decomposition: <a href="#qr_econ">qr_econ()</a></li>
|
Chris@49
|
11233 <li><a href="#each_colrow">.each_col() & .each_row()</a> for vector operations repeated on each column or row of a matrix</li>
|
Chris@49
|
11234 <li>preliminary support for <a href="#SpMat">sparse matrices</a></li>
|
Chris@49
|
11235 <li>ability to <a href="#save_load_mat">save and load</a> matrices in HDF5 format</li>
|
Chris@49
|
11236 <li>faster <a href="#svd">singular value decomposition</a> via optional use of divide-and-conquer algorithm</li>
|
Chris@49
|
11237 <li>faster <a href="#randu_randn_member">.randn()</a></li>
|
Chris@49
|
11238 <li>faster <a href="#dot">dot() and cdot()</a> for complex numbers</li>
|
Chris@49
|
11239 </ul>
|
Chris@49
|
11240 <br>
|
Chris@49
|
11241 </li>
|
Chris@49
|
11242 <a name="added_in_32"></a>
|
Chris@49
|
11243 <li>Added in 3.2:
|
Chris@49
|
11244 <ul>
|
Chris@49
|
11245 <li><a href="#unique">unique()</a>, for finding unique elements of a matrix</li>
|
Chris@49
|
11246 <li><a href="#eval_member">.eval()</a>, for forcing the evaluation of delayed expressions</li>
|
Chris@49
|
11247 <li>faster <a href="#eig_sym">eigen decomposition</a> via optional use of divide-and-conquer algorithm</li>
|
Chris@49
|
11248 <li>faster <a href="#t_st_members">transpose</a> of vectors and compound expressions</li>
|
Chris@49
|
11249 <li>faster handling of <a href="#diag">diagonal views</a></li>
|
Chris@49
|
11250 <li>faster handling of tiny <a href="#adv_constructors_col_fixed">fixed size</a> vectors (≤ 4 elements)</li>
|
Chris@49
|
11251 </ul>
|
Chris@49
|
11252 <br>
|
Chris@49
|
11253 </li>
|
Chris@49
|
11254 <a name="added_in_30"></a>
|
Chris@49
|
11255 <li>Added in 3.0:
|
Chris@49
|
11256 <ul>
|
Chris@49
|
11257 <li>shorthand for inverse: <a href="#i_member">.i()</a></li>
|
Chris@49
|
11258 <li><a href="#constants">datum</a> class</li>
|
Chris@49
|
11259 <li><a href="#hist">hist()</a> and <a href="#histc">histc()</a></li>
|
Chris@49
|
11260 <li>non-contiguous <a href="#submat">submatrix views</a></li>
|
Chris@49
|
11261 <li>faster handling of <a href="#submat">submatrix views</a> with a single row or column</li>
|
Chris@49
|
11262 <li>faster element access in <a href="#adv_constructors_mat_fixed">fixed size matrices</a></li>
|
Chris@49
|
11263 <li>faster <a href="#repmat">repmat()</a></li>
|
Chris@49
|
11264 </ul>
|
Chris@49
|
11265 <br>
|
Chris@49
|
11266 </li>
|
Chris@49
|
11267 <li>Changed in 3.0:
|
Chris@49
|
11268 <ul>
|
Chris@49
|
11269 <li>expressions <i>X=<a href="#inv">inv</a>(A)*B</i> and <i>X=A<a href="#i_member">.i()</a>*B</i> are automatically converted to <i>X=<a href="#solve">solve</a>(A,B)</i>
|
Chris@49
|
11270 <li>better detection of vector expressions by <a href="#sum">sum()</a>, <a href="#cumsum">cumsum()</a>, <a href="#prod">prod()</a>, <a href="#min_and_max">min()</a>, <a href="#min_and_max">max()</a>, <a href="#stats_fns">mean()</a>, <a href="#stats_fns">median()</a>, <a href="#stats_fns">stddev()</a>, <a href="#stats_fns">var()</a>
|
Chris@49
|
11271 <li>faster generation of random numbers
|
Chris@49
|
11272 (eg. <a href="#randu_randn_standalone">randu()</a> and <a href="#randu_randn_standalone">randn()</a>),
|
Chris@49
|
11273 via an algorithm that produces slightly different numbers than in 2.x
|
Chris@49
|
11274 </li>
|
Chris@49
|
11275 <li>
|
Chris@49
|
11276 support for tying writeable auxiliary (external) memory to fixed size matrices has been removed;
|
Chris@49
|
11277 instead, you can use standard matrices with <a href="#adv_constructors_mat">writeable auxiliary memory</a>,
|
Chris@49
|
11278 or initialise fixed size matrices by <a href="#adv_constructors_mat">copying the memory</a>.
|
Chris@49
|
11279 Using auxiliary memory with standard matrices is unaffected.
|
Chris@49
|
11280 </li>
|
Chris@49
|
11281 <li>
|
Chris@49
|
11282 <i>.print_trans()</i> and <i>.raw_print_trans()</i> have been removed;
|
Chris@49
|
11283 instead, you can chain <i><a href="#t_st_members">.t()</a></i> and <i><a href="#print">.print()</a></i> to achieve a similar result: <i>X.t().print()</i>
|
Chris@49
|
11284 </li>
|
Chris@49
|
11285 </ul>
|
Chris@49
|
11286 <br>
|
Chris@49
|
11287 </li>
|
Chris@49
|
11288 <a name="added_in_24"></a>
|
Chris@49
|
11289 <li>Added in 2.4:
|
Chris@49
|
11290 <ul>
|
Chris@49
|
11291 <li>shorter forms of transposes: <a href="#t_st_members">.t()</a> and <a href="#t_st_members">.st()</a></li>
|
Chris@49
|
11292 <li><a href="#resize_member">.resize()</a> and <a href="#resize">resize()</a></li>
|
Chris@49
|
11293 <li>optional use of 64 bit indices (allowing matrices to have more than 4 billion elements),
|
Chris@49
|
11294 <br>enabled via ARMA_64BIT_WORD in <i>include/armadillo_bits/config.hpp</i></li>
|
Chris@49
|
11295 <li>experimental support for C++11 initialiser lists,
|
Chris@49
|
11296 <br>enabled via ARMA_USE_CXX11 in <i>include/armadillo_bits/config.hpp</i></li>
|
Chris@49
|
11297 </ul>
|
Chris@49
|
11298 <br>
|
Chris@49
|
11299 <li>Changed in 2.4:
|
Chris@49
|
11300 <ul>
|
Chris@49
|
11301 <li>refactored code to eliminate warnings when using the Clang C++ compiler</li>
|
Chris@49
|
11302 <li><a href="#Mat">umat</a>, <a href="#Col">uvec</a>, <a href="#min_and_max_member">.min()</a> and <a href="#min_and_max_member">.max()</a>
|
Chris@49
|
11303 have been changed to use the <a href="#uword"><i>uword</i></a> type instead of the <i>u32</i> type;
|
Chris@49
|
11304 by default the <i>uword</i> and <i>u32</i> types are equivalent (ie. unsigned integer type with a minimum width 32 bits);
|
Chris@49
|
11305 however, when the use of 64 bit indices is enabled via ARMA_64BIT_WORD in <i>include/armadillo_bits/config.hpp</i>,
|
Chris@49
|
11306 the <i>uword</i> type then has a minimum width of 64 bits
|
Chris@49
|
11307 </ul>
|
Chris@49
|
11308 </li>
|
Chris@49
|
11309 <br>
|
Chris@49
|
11310 <li>Added in 2.2:
|
Chris@49
|
11311 <ul>
|
Chris@49
|
11312 <li><a href="#svd_econ">svd_econ()</a></li>
|
Chris@49
|
11313 <li><a href="#toeplitz">circ_toeplitz()</a></li>
|
Chris@49
|
11314 <li><a href="#is_vec">.is_colvec()</a> and <a href="#is_vec">.is_rowvec()</a></li>
|
Chris@49
|
11315 </ul>
|
Chris@49
|
11316 <br>
|
Chris@49
|
11317 <li>Added in 2.0:
|
Chris@49
|
11318 <ul>
|
Chris@49
|
11319 <li><a href="#det">det()</a>, <a href="#inv">inv()</a> and <a href="#solve">solve()</a> can be forced to use more precise algorithms for tiny matrices (≤ 4x4)</li>
|
Chris@49
|
11320 <li><a href="#syl">syl()</a>, for solving Sylvester's equation</li>
|
Chris@49
|
11321 <li><a href="#strans">strans()</a>, for transposing a complex matrix without taking the complex conjugate</li>
|
Chris@49
|
11322 <li><a href="#symmat">symmatu()</a> and <a href="#symmat">symmatl()</a></li>
|
Chris@49
|
11323 <li>submatrices of <a href="#submat">submatrices</a></li>
|
Chris@49
|
11324 <li>faster <a href="#inv">inverse</a> of symmetric positive definite matrices</li>
|
Chris@49
|
11325 <li>faster element access for <a href="#adv_constructors_mat_fixed">fixed size</a> matrices</li>
|
Chris@49
|
11326 <li>faster multiplication of tiny matrices (eg. 4x4)</li>
|
Chris@49
|
11327 <li>faster compound expressions containing <a href="#submat">submatrices</a></li>
|
Chris@49
|
11328 <li>handling of arbitrarily sized empty matrices (eg. 5x0)</li>
|
Chris@49
|
11329 <li>.count() member function in <a href="#running_stat">running_stat</a> and <a href="#running_stat_vec">running_stat_vec</a></li>
|
Chris@49
|
11330 <li><a href="#save_load_mat">loading & saving</a> of matrices as CSV text files</li>
|
Chris@49
|
11331 </ul>
|
Chris@49
|
11332 <br>
|
Chris@49
|
11333 <li>Changed in 2.0:
|
Chris@49
|
11334 <ul>
|
Chris@49
|
11335 <li><a href="#trans">trans()</a> now takes the complex conjugate when transposing a complex matrix</li>
|
Chris@49
|
11336 <li>Forms of
|
Chris@49
|
11337 <a href="#chol">chol()</a>, <a href="#eig_sym">eig_sym()</a>, <a href="#eig_gen">eig_gen()</a>,
|
Chris@49
|
11338 <a href="#inv">inv()</a>, <a href="#lu">lu()</a>, <a href="#pinv">pinv()</a>, <a href="#princomp">princomp()</a>,
|
Chris@49
|
11339 <a href="#qr">qr()</a>, <a href="#solve">solve()</a>, <a href="#svd">svd()</a>, <a href="#syl">syl()</a>
|
Chris@49
|
11340 that do not return a bool indicating success now throw <i>std::runtime_error</i> exceptions when failures are detected</li>
|
Chris@49
|
11341 <li>princomp_cov() has been removed; <a href="#eig_sym">eig_sym()</a> in conjunction with <a href="#cov">cov()</a> can be used instead</li>
|
Chris@49
|
11342 <li><a href="#is_vec">.is_vec()</a> now outputs <i>true</i> for empty vectors (eg. 0x1)</li>
|
Chris@49
|
11343 <li>set_log_stream() & get_log_stream() have been replaced by <a href="#logging">set_stream_err1()</a> & <a href="#logging">get_stream_err1()</a></li>
|
Chris@49
|
11344 </ul>
|
Chris@49
|
11345 <br>
|
Chris@49
|
11346 <li>Added in 1.2:
|
Chris@49
|
11347 <ul>
|
Chris@49
|
11348 <li><a href="#min_and_max_member">.min() & .max()</a> member functions of Mat and Cube</li>
|
Chris@49
|
11349 <li><a href="#misc_fns">floor()</a> and <a href="#misc_fns">ceil()</a></li>
|
Chris@49
|
11350 <li>representation of “not a number”: math::nan()</li>
|
Chris@49
|
11351 <li>representation of infinity: math::inf()</li>
|
Chris@49
|
11352 <li>standalone <a href="#is_finite_standalone">is_finite()</a></li>
|
Chris@49
|
11353 <li><a href="#in_range">.in_range()</a> can use <b>span()</b> arguments</li>
|
Chris@49
|
11354 <li><a href="#adv_constructors_mat">fixed size</a> matrices and vectors can use auxiliary (external) memory</li>
|
Chris@49
|
11355 <li><a href="#submat">submatrices</a> and <a href="#subfield">subfields</a> can be accessed via <i><b>X(</b> <b>span(</b>a,b<b>)</b>, <b>span(</b>c,d<b>)</b> <b>)</b></i></li>
|
Chris@49
|
11356 <li><a href="#subcube">subcubes</a> can be accessed via <i><b>X(</b> <b>span(</b>a,b<b>)</b>, <b>span(</b>c,d<b>)</b>, <b>span(</b>e,f<b>)</b> <b>)</b></i></li>
|
Chris@49
|
11357 <li>the two argument version of <i><b>span</b></i> can be replaced by
|
Chris@49
|
11358 <i><b>span::all</b></i> or <i><b>span()</b></i>, to indicate an entire range
|
Chris@49
|
11359 </li>
|
Chris@49
|
11360 <li>for cubes, the two argument version of <i><b>span</b></i> can be replaced by
|
Chris@49
|
11361 a single argument version, <i><b>span(</b>a<b>)</b></i>, to indicate a single column, row or slice
|
Chris@49
|
11362 </li>
|
Chris@49
|
11363 <li>arbitrary "flat" subcubes can be interpreted as matrices; for example:
|
Chris@49
|
11364 <ul>
|
Chris@49
|
11365 <pre>
|
Chris@49
|
11366 cube Q = randu<cube>(5,3,4);
|
Chris@49
|
11367 mat A = Q( span(1), span(1,2), span::all );
|
Chris@49
|
11368 // A has a size of 2x4
|
Chris@49
|
11369
|
Chris@49
|
11370 vec v = ones<vec>(4);
|
Chris@49
|
11371 Q( span(1), span(1), span::all ) = v;
|
Chris@49
|
11372 </pre>
|
Chris@49
|
11373 </ul>
|
Chris@49
|
11374 </li>
|
Chris@49
|
11375 <li>interpretation of matrices as triangular through <a href="#trimat">trimatu() / trimatl()</a></li>
|
Chris@49
|
11376 <li>explicit handling of triangular matrices by <a href="#solve">solve()</a> and <a href="#inv">inv()</a></li>
|
Chris@49
|
11377 <li>extended syntax for <a href="#submat">submatrices</a>, including access to elements whose indices are specified in a vector</li>
|
Chris@49
|
11378 <li>ability to change the stream used for <a href="#logging">logging</a> of errors and warnings</li>
|
Chris@49
|
11379 <li>ability to <a href="#save_load_mat">save/load matrices</a> in raw binary format</li>
|
Chris@49
|
11380 <li>cumulative sum function: <a href="#cumsum">cumsum()</a></li>
|
Chris@49
|
11381 </ul>
|
Chris@49
|
11382 </li>
|
Chris@49
|
11383 <br>
|
Chris@49
|
11384 <li>
|
Chris@49
|
11385 Changed in 1.0 (compared to earlier 0.x development versions):
|
Chris@49
|
11386 <ul>
|
Chris@49
|
11387 <li>
|
Chris@49
|
11388 the 3 argument version of <a href="#lu">lu()</a>,
|
Chris@49
|
11389 eg. lu(L,U,X),
|
Chris@49
|
11390 provides L and U which should be the same as produced by Octave 3.2
|
Chris@49
|
11391 (this was not the case in versions prior to 0.9.90)
|
Chris@49
|
11392 </li>
|
Chris@49
|
11393 <br>
|
Chris@49
|
11394 <li>
|
Chris@49
|
11395 rand() has been replaced by <a href="#randu_randn_standalone">randu()</a>;
|
Chris@49
|
11396 this has been done to avoid confusion with <a href="http://cplusplus.com/reference/clibrary/cstdlib/rand/">std::rand()</a>,
|
Chris@49
|
11397 which generates random numbers in a different interval
|
Chris@49
|
11398 </li>
|
Chris@49
|
11399 <br>
|
Chris@49
|
11400 <li>
|
Chris@49
|
11401 In versions earlier than 0.9.0,
|
Chris@49
|
11402 some multiplication operations directly converted result matrices with a size of 1x1 into scalars.
|
Chris@49
|
11403 This is no longer the case.
|
Chris@49
|
11404 If you know the result of an expression will be a 1x1 matrix and wish to treat it as a pure scalar,
|
Chris@49
|
11405 use the <a href="#as_scalar">as_scalar()</a> wrapping function
|
Chris@49
|
11406 </li>
|
Chris@49
|
11407 <br>
|
Chris@49
|
11408 <li>
|
Chris@49
|
11409 Almost all functions have been placed in the delayed operations framework (for speed purposes).
|
Chris@49
|
11410 This may affect code which assumed that the output of some functions was a pure matrix.
|
Chris@49
|
11411 The solution is easy, as explained below.
|
Chris@49
|
11412 <br>
|
Chris@49
|
11413 <br>
|
Chris@49
|
11414 In general, Armadillo queues operations before executing them.
|
Chris@49
|
11415 As such, the direct output of an operation or function cannot be assumed to be a directly accessible matrix.
|
Chris@49
|
11416 The queued operations are executed when the output needs to be stored in a matrix,
|
Chris@49
|
11417 eg. <i>mat B = trans(A)</i> or <i>mat B(trans(A))</i>.
|
Chris@49
|
11418 If you need to force the execution of the delayed operations,
|
Chris@49
|
11419 place the operation or function inside the corresponding Mat constructor.
|
Chris@49
|
11420 For example, if your code assumed that the output of some functions was a pure matrix,
|
Chris@49
|
11421 eg. <i>chol(m).diag()</i>, change the code to <i>mat(chol(m)).diag()</i>.
|
Chris@49
|
11422 Similarly, if you need to pass the result of an operation such as <i>A+B</i> to one of your own functions,
|
Chris@49
|
11423 use <i>my_function( mat(A+B) )</i>.
|
Chris@49
|
11424 </li>
|
Chris@49
|
11425 </ul>
|
Chris@49
|
11426 </li>
|
Chris@49
|
11427 </ul>
|
Chris@49
|
11428 </li>
|
Chris@49
|
11429 <br>
|
Chris@49
|
11430 <br>
|
Chris@49
|
11431 <br>
|
Chris@49
|
11432
|
Chris@49
|
11433
|
Chris@49
|
11434 <!-- END CONTENT -->
|
Chris@49
|
11435
|
Chris@49
|
11436
|
Chris@49
|
11437 <hr>
|
Chris@49
|
11438 <br>
|
Chris@49
|
11439 <br>
|
Chris@49
|
11440
|
Chris@49
|
11441 </td>
|
Chris@49
|
11442 </tr>
|
Chris@49
|
11443 </tbody>
|
Chris@49
|
11444 </table>
|
Chris@49
|
11445 </center>
|
Chris@49
|
11446 </body>
|
Chris@49
|
11447 </html>
|