Mercurial > hg > segmenter-vamp-plugin
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 //! @} |