comparison armadillo-2.4.4/include/armadillo_bits/fn_median.hpp @ 0:8b6102e2a9b0

Armadillo Library
author maxzanoni76 <max.zanoni@eecs.qmul.ac.uk>
date Wed, 11 Apr 2012 09:27:06 +0100
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:8b6102e2a9b0
1 // Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
2 // Copyright (C) 2009-2011 Conrad Sanderson
3 //
4 // This file is part of the Armadillo C++ library.
5 // It is provided without any warranty of fitness
6 // for any purpose. You can redistribute this file
7 // and/or modify it under the terms of the GNU
8 // Lesser General Public License (LGPL) as published
9 // by the Free Software Foundation, either version 3
10 // of the License or (at your option) any later version.
11 // (see http://www.opensource.org/licenses for more info)
12
13
14 //! \addtogroup fn_median
15 //! @{
16
17
18 template<typename T1>
19 arma_inline
20 const Op<T1, op_median>
21 median(const Base<typename T1::elem_type,T1>& X, const uword dim = 0)
22 {
23 arma_extra_debug_sigprint();
24
25 return Op<T1, op_median>(X.get_ref(), dim, 0);
26 }
27
28
29
30 //! Immediate 'find the median value of a row vector' operation
31 template<typename eT>
32 inline
33 arma_warn_unused
34 eT
35 median(const Row<eT>& A)
36 {
37 arma_extra_debug_sigprint();
38
39 const uword A_n_elem = A.n_elem;
40
41 arma_debug_check( (A_n_elem == 0), "median(): given object has no elements" );
42
43 return op_median::direct_median(A.mem, A_n_elem);
44 }
45
46
47
48 //! Immediate 'find the median value of a column vector' operation
49 template<typename eT>
50 inline
51 arma_warn_unused
52 eT
53 median(const Col<eT>& A)
54 {
55 arma_extra_debug_sigprint();
56
57 const uword A_n_elem = A.n_elem;
58
59 arma_debug_check( (A_n_elem == 0), "median(): given object has no elements" );
60
61 return op_median::direct_median(A.mem, A_n_elem);
62 }
63
64
65
66 //! Immediate 'find the median value of a row vector' operation (complex number version)
67 template<typename T>
68 inline
69 arma_warn_unused
70 std::complex<T>
71 median(const Row< std::complex<T> >& A)
72 {
73 arma_extra_debug_sigprint();
74
75 const uword A_n_elem = A.n_elem;
76
77 arma_debug_check( (A_n_elem == 0), "median(): given object has no elements" );
78
79 uword index1;
80 uword index2;
81 op_median::direct_cx_median_index(index1, index2, A.mem, A_n_elem);
82
83 return (index1 == index2) ? A.mem[index1] : op_median::robust_mean( A.mem[index1], A.mem[index2] );
84 }
85
86
87
88 //! Immediate 'find the median value of a column vector' operation (complex number version)
89 template<typename T>
90 inline
91 arma_warn_unused
92 std::complex<T>
93 median(const Col< std::complex<T> >& A)
94 {
95 arma_extra_debug_sigprint();
96
97 const uword A_n_elem = A.n_elem;
98
99 arma_debug_check( (A_n_elem == 0), "median(): given object has no elements" );
100
101 uword index1;
102 uword index2;
103 op_median::direct_cx_median_index(index1, index2, A.mem, A_n_elem);
104
105 return (index1 == index2) ? A.mem[index1] : op_median::robust_mean( A.mem[index1], A.mem[index2] );
106 }
107
108
109
110 //! find the median value of a subview_row
111 template<typename eT>
112 inline
113 arma_warn_unused
114 eT
115 median(const subview_row<eT>& A)
116 {
117 arma_extra_debug_sigprint();
118
119 arma_debug_check( (A.n_elem == 0), "median(): given object has no elements" );
120
121 return op_median::direct_median(A);
122 }
123
124
125
126 //! find the median value of a subview_col
127 template<typename eT>
128 inline
129 arma_warn_unused
130 eT
131 median(const subview_col<eT>& A)
132 {
133 arma_extra_debug_sigprint();
134
135 arma_debug_check( (A.n_elem == 0), "median(): given object has no elements" );
136
137 return op_median::direct_median(A.colptr(0), A.n_rows);
138 }
139
140
141
142 //! find the median value of a subview_row (complex number version)
143 template<typename T>
144 inline
145 arma_warn_unused
146 std::complex<T>
147 median(const subview_row< std::complex<T> >& A)
148 {
149 arma_extra_debug_sigprint();
150
151 arma_debug_check( (A.n_elem == 0), "median(): given object has no elements" );
152
153 uword index1;
154 uword index2;
155 op_median::direct_cx_median_index(index1, index2, A);
156
157 return (index1 == index2) ? A[index1] : op_median::robust_mean(A[index1], A[index2]);
158 }
159
160
161
162 //! find the median value of a subview_col (complex number version)
163 template<typename T>
164 inline
165 arma_warn_unused
166 std::complex<T>
167 median(const subview_col< std::complex<T> >& A)
168 {
169 arma_extra_debug_sigprint();
170
171 arma_debug_check( (A.n_elem == 0), "median(): given object has no elements" );
172
173 uword index1;
174 uword index2;
175 op_median::direct_cx_median_index(index1, index2, A);
176
177 return (index1 == index2) ? A[index1] : op_median::robust_mean(A[index1], A[index2]);
178 }
179
180
181
182 template<typename eT>
183 inline
184 arma_warn_unused
185 eT
186 median(const diagview<eT>& A)
187 {
188 arma_extra_debug_sigprint();
189
190 arma_debug_check( (A.n_elem == 0), "median(): given object has no elements" );
191
192 return op_median::direct_median(A);
193 }
194
195
196
197 template<typename T>
198 inline
199 arma_warn_unused
200 std::complex<T>
201 median(const diagview< std::complex<T> >& A)
202 {
203 arma_extra_debug_sigprint();
204
205 arma_debug_check( (A.n_elem == 0), "median(): given object has no elements" );
206
207 uword index1;
208 uword index2;
209 op_median::direct_cx_median_index(index1, index2, A);
210
211 return (index1 == index2) ? A[index1] : op_median::robust_mean(A[index1], A[index2]);
212 }
213
214
215
216 template<typename eT, typename T1>
217 inline
218 arma_warn_unused
219 eT
220 median(const subview_elem1<eT,T1>& A)
221 {
222 arma_extra_debug_sigprint();
223
224 const Col<eT> X(A);
225
226 return median(X);
227 }
228
229
230
231 //! @}