Chris@49
|
1 // Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
|
Chris@49
|
2 // Copyright (C) 2008-2012 Conrad Sanderson
|
Chris@49
|
3 //
|
Chris@49
|
4 // This Source Code Form is subject to the terms of the Mozilla Public
|
Chris@49
|
5 // License, v. 2.0. If a copy of the MPL was not distributed with this
|
Chris@49
|
6 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
Chris@49
|
7
|
Chris@49
|
8
|
Chris@49
|
9 //! \addtogroup fn_min
|
Chris@49
|
10 //! @{
|
Chris@49
|
11
|
Chris@49
|
12 //! \brief
|
Chris@49
|
13 //! Delayed 'minimum values' operation.
|
Chris@49
|
14 //! The dimension, along which the minima are found, is set via 'dim'.
|
Chris@49
|
15 //! For dim = 0, the minimum value of each column is found (i.e. searches by traversing across rows).
|
Chris@49
|
16 //! For dim = 1, the minimum value of each row is found (i.e. searches by traversing across columns).
|
Chris@49
|
17 //! The default is dim = 0.
|
Chris@49
|
18
|
Chris@49
|
19 template<typename T1>
|
Chris@49
|
20 arma_inline
|
Chris@49
|
21 const Op<T1, op_min>
|
Chris@49
|
22 min
|
Chris@49
|
23 (
|
Chris@49
|
24 const T1& X,
|
Chris@49
|
25 const uword dim = 0,
|
Chris@49
|
26 const typename enable_if< is_arma_type<T1>::value == true >::result* junk1 = 0,
|
Chris@49
|
27 const typename enable_if< resolves_to_vector<T1>::value == false >::result* junk2 = 0
|
Chris@49
|
28 )
|
Chris@49
|
29 {
|
Chris@49
|
30 arma_extra_debug_sigprint();
|
Chris@49
|
31 arma_ignore(junk1);
|
Chris@49
|
32 arma_ignore(junk2);
|
Chris@49
|
33
|
Chris@49
|
34 return Op<T1, op_min>(X, dim, 0);
|
Chris@49
|
35 }
|
Chris@49
|
36
|
Chris@49
|
37
|
Chris@49
|
38 template<typename T1>
|
Chris@49
|
39 arma_inline
|
Chris@49
|
40 const Op<T1, op_min>
|
Chris@49
|
41 min
|
Chris@49
|
42 (
|
Chris@49
|
43 const T1& X,
|
Chris@49
|
44 const uword dim,
|
Chris@49
|
45 const typename enable_if<resolves_to_vector<T1>::value == true>::result* junk = 0
|
Chris@49
|
46 )
|
Chris@49
|
47 {
|
Chris@49
|
48 arma_extra_debug_sigprint();
|
Chris@49
|
49 arma_ignore(junk);
|
Chris@49
|
50
|
Chris@49
|
51 return Op<T1, op_min>(X, dim, 0);
|
Chris@49
|
52 }
|
Chris@49
|
53
|
Chris@49
|
54
|
Chris@49
|
55
|
Chris@49
|
56 template<typename T1>
|
Chris@49
|
57 inline
|
Chris@49
|
58 arma_warn_unused
|
Chris@49
|
59 typename T1::elem_type
|
Chris@49
|
60 min
|
Chris@49
|
61 (
|
Chris@49
|
62 const T1& X,
|
Chris@49
|
63 const arma_empty_class junk1 = arma_empty_class(),
|
Chris@49
|
64 const typename enable_if<resolves_to_vector<T1>::value == true>::result* junk2 = 0
|
Chris@49
|
65 )
|
Chris@49
|
66 {
|
Chris@49
|
67 arma_extra_debug_sigprint();
|
Chris@49
|
68 arma_ignore(junk1);
|
Chris@49
|
69 arma_ignore(junk2);
|
Chris@49
|
70
|
Chris@49
|
71 return op_min::min(X);
|
Chris@49
|
72 }
|
Chris@49
|
73
|
Chris@49
|
74
|
Chris@49
|
75
|
Chris@49
|
76 //! \brief
|
Chris@49
|
77 //! Immediate 'find minimum value' operation,
|
Chris@49
|
78 //! invoked, for example, by: min(min(A))
|
Chris@49
|
79 template<typename T1>
|
Chris@49
|
80 inline
|
Chris@49
|
81 arma_warn_unused
|
Chris@49
|
82 typename T1::elem_type
|
Chris@49
|
83 min(const Op<T1, op_min>& in)
|
Chris@49
|
84 {
|
Chris@49
|
85 arma_extra_debug_sigprint();
|
Chris@49
|
86 arma_extra_debug_print("min(): two consecutive min() calls detected");
|
Chris@49
|
87
|
Chris@49
|
88 return op_min::min(in.m);
|
Chris@49
|
89 }
|
Chris@49
|
90
|
Chris@49
|
91
|
Chris@49
|
92
|
Chris@49
|
93 template<typename T1>
|
Chris@49
|
94 arma_inline
|
Chris@49
|
95 const Op< Op<T1, op_min>, op_min>
|
Chris@49
|
96 min(const Op<T1, op_min>& in, const uword dim)
|
Chris@49
|
97 {
|
Chris@49
|
98 arma_extra_debug_sigprint();
|
Chris@49
|
99
|
Chris@49
|
100 return Op< Op<T1, op_min>, op_min>(in, dim, 0);
|
Chris@49
|
101 }
|
Chris@49
|
102
|
Chris@49
|
103
|
Chris@49
|
104
|
Chris@49
|
105 template<typename T>
|
Chris@49
|
106 arma_inline
|
Chris@49
|
107 arma_warn_unused
|
Chris@49
|
108 const typename arma_scalar_only<T>::result &
|
Chris@49
|
109 min(const T& x)
|
Chris@49
|
110 {
|
Chris@49
|
111 return x;
|
Chris@49
|
112 }
|
Chris@49
|
113
|
Chris@49
|
114
|
Chris@49
|
115
|
Chris@49
|
116 template<typename T1>
|
Chris@49
|
117 inline
|
Chris@49
|
118 arma_warn_unused
|
Chris@49
|
119 typename
|
Chris@49
|
120 enable_if2
|
Chris@49
|
121 <
|
Chris@49
|
122 (is_arma_sparse_type<T1>::value == true) && (resolves_to_sparse_vector<T1>::value == true),
|
Chris@49
|
123 typename T1::elem_type
|
Chris@49
|
124 >::result
|
Chris@49
|
125 min(const T1& x)
|
Chris@49
|
126 {
|
Chris@49
|
127 arma_extra_debug_sigprint();
|
Chris@49
|
128
|
Chris@49
|
129 return spop_min::vector_min(x);
|
Chris@49
|
130 }
|
Chris@49
|
131
|
Chris@49
|
132
|
Chris@49
|
133
|
Chris@49
|
134 template<typename T1>
|
Chris@49
|
135 inline
|
Chris@49
|
136 typename
|
Chris@49
|
137 enable_if2
|
Chris@49
|
138 <
|
Chris@49
|
139 (is_arma_sparse_type<T1>::value == true) && (resolves_to_sparse_vector<T1>::value == false),
|
Chris@49
|
140 const SpOp<T1, spop_min>
|
Chris@49
|
141 >::result
|
Chris@49
|
142 min(const T1& X, const uword dim = 0)
|
Chris@49
|
143 {
|
Chris@49
|
144 arma_extra_debug_sigprint();
|
Chris@49
|
145
|
Chris@49
|
146 return SpOp<T1, spop_min>(X, dim, 0);
|
Chris@49
|
147 }
|
Chris@49
|
148
|
Chris@49
|
149
|
Chris@49
|
150
|
Chris@49
|
151 template<typename T1>
|
Chris@49
|
152 inline
|
Chris@49
|
153 arma_warn_unused
|
Chris@49
|
154 typename T1::elem_type
|
Chris@49
|
155 min(const SpOp<T1, spop_min>& X)
|
Chris@49
|
156 {
|
Chris@49
|
157 arma_extra_debug_sigprint();
|
Chris@49
|
158 arma_extra_debug_print("min(): two consecutive min() calls detected");
|
Chris@49
|
159
|
Chris@49
|
160 return spop_min::vector_min(X.m);
|
Chris@49
|
161 }
|
Chris@49
|
162
|
Chris@49
|
163
|
Chris@49
|
164
|
Chris@49
|
165 template<typename T1>
|
Chris@49
|
166 inline
|
Chris@49
|
167 const SpOp< SpOp<T1, spop_min>, spop_min>
|
Chris@49
|
168 min(const SpOp<T1, spop_min>& in, const uword dim)
|
Chris@49
|
169 {
|
Chris@49
|
170 arma_extra_debug_sigprint();
|
Chris@49
|
171
|
Chris@49
|
172 return SpOp< SpOp<T1, spop_min>, spop_min>(in, dim, 0);
|
Chris@49
|
173 }
|
Chris@49
|
174
|
Chris@49
|
175
|
Chris@49
|
176
|
Chris@49
|
177 //! @}
|