vbl_attributes.hxx
Go to the documentation of this file.
1 #ifndef vbl_attributes_hxx_
2 #define vbl_attributes_hxx_
3 #include <algorithm>
4 #include "vbl_attributes.h"
5 //:
6 // \file
7 
8 #ifdef _MSC_VER
9 # include <vcl_msvc_warnings.h>
10 #endif
11 #include <cassert>
12 
13 // ------------ 1d array ----------
14 
15 //: minimum element value
16 template <class T>
17 T minval(vbl_array_1d<T> const& in)
18 {
19  assert(in.size()>0);
20  T mval = *(in.begin());
21  for (typename vbl_array_1d<T>::const_iterator it = in.begin();
22  it != in.end(); ++it) {
23  T v = *it;
24  if (v<mval) mval = v;
25  }
26  return mval;
27 }
28 
29 //: maximum element value
30 template <class T>
31 T maxval(vbl_array_1d<T> const& in)
32 {
33  assert(in.size()>0);
34  T mval = *(in.begin());
35  for (typename vbl_array_1d<T>::const_iterator it = in.begin();
36  it != in.end(); ++it) {
37  T v = *it;
38  if (v>mval) mval = v;
39  }
40  return mval;
41 }
42 
43 //: min max bounds
44 template <class T>
45 void bounds(vbl_array_1d<T> const& in, T& min, T& max)
46 {
47  assert(in.size()>0);
48  max = min = *(in.begin());
49  for (typename vbl_array_1d<T>::const_iterator it = in.begin();
50  it != in.end(); ++it) {
51  T v = *it;
52  if (v>max) max = v;
53  if (v<min) min = v;
54  }
55 }
56 
57 //: mean of element values
58 template <class T>
59 T mean(vbl_array_1d<T> const& in)
60 {
61  T sum = T(0);
62  std::size_t n = in.size();
63  assert(n>0);
64  for (typename vbl_array_1d<T>::const_iterator it = in.begin();
65  it != in.end(); ++it)
66  sum += *it;
67  return sum/static_cast<T>(n);
68 }
69 
70 // ----------------- 2d array ------------
71 
72 //: minimum element value
73 template <class T>
74 T minval(vbl_array_2d<T> const& in)
75 {
76  assert(in.size()>0);
77  T mval = *(in.begin());
78  for (typename vbl_array_2d<T>::const_iterator it = in.begin();
79  it != in.end(); ++it) {
80  T v = *it;
81  if (v<mval) mval = v;
82  }
83  return mval;
84 }
85 
86 //: maximum element value
87 template <class T>
88 T maxval(vbl_array_2d<T> const& in)
89 {
90  assert(in.size()>0);
91  T mval = *(in.begin());
92  for (typename vbl_array_2d<T>::const_iterator it = in.begin();
93  it != in.end(); ++it) {
94  T v = *it;
95  if (v>mval) mval = v;
96  }
97  return mval;
98 }
99 
100 //: min max bounds
101 template <class T>
102 void bounds(vbl_array_2d<T> const& in, T& min, T& max)
103 {
104  assert(in.size()>0);
105  max = min = *(in.begin());
106  for (typename vbl_array_2d<T>::const_iterator it = in.begin();
107  it != in.end(); ++it) {
108  T v = *it;
109  if (v>max) max = v;
110  if (v<min) min = v;
111  }
112 }
113 
114 //: mean of element values
115 template <class T>
116 T mean(vbl_array_2d<T> const& in)
117 {
118  T sum = T(0);
119  std::size_t n = in.size();
120  assert(n>0);
121  for (typename vbl_array_2d<T>::const_iterator it = in.begin();
122  it != in.end(); ++it)
123  sum += *it;
124  return sum/static_cast<T>(n);
125 }
126 
127 // ----------------- 3d array ------------
128 
129 //: minimum element value
130 template <class T>
132 {
133  assert(in.size()>0);
134  T mval = *(in.begin());
135  for (typename vbl_array_3d<T>::const_iterator it = in.begin();
136  it != in.end(); ++it) {
137  T v = *it;
138  if (v<mval) mval = v;
139  }
140  return mval;
141 }
142 
143 //: maximum element value
144 template <class T>
146 {
147  assert(in.size()>0);
148  T mval = *(in.begin());
149  for (typename vbl_array_3d<T>::const_iterator it = in.begin();
150  it != in.end(); ++it) {
151  T v = *it;
152  if (v>mval) mval = v;
153  }
154  return mval;
155 }
156 
157 //: min max bounds
158 template <class T>
159 void bounds(vbl_array_3d<T> const& in, T& min, T& max)
160 {
161  assert(in.size()>0);
162  max = min = *(in.begin());
163  for (typename vbl_array_3d<T>::const_iterator it = in.begin();
164  it != in.end(); ++it) {
165  T v = *it;
166  if (v>max) max = v;
167  if (v<min) min = v;
168  }
169 }
170 
171 //: mean of element values
172 template <class T>
173 T mean(vbl_array_3d<T> const& in)
174 {
175  T sum = T(0);
176  std::size_t n = in.size();
177  assert(n>0);
178  for (typename vbl_array_3d<T>::const_iterator it = in.begin();
179  it != in.end(); ++it)
180  sum += *it;
181  return sum/static_cast<T>(n);
182 }
183 
184 //: median (actually: left-median) of element values
185 template <class T>
187 {
188  assert(in.size()>0);
189  vbl_array_1d<T> t = in;
190  std::sort(t.begin(), t.end());
191  return *(t.begin() + (in.size()/2));
192 }
193 
194 //: median (actually: left-median) of element values
195 template <class T>
197 {
198  assert(in.size()>0);
199  vbl_array_2d<T> t = in;
200  std::sort(t.begin(), t.end());
201  return *(t.begin() + (in.size()/2));
202 }
203 
204 //: median (actually: left-median) of element values
205 template <class T>
207 {
208  assert(in.size()>0);
209  vbl_array_3d<T> t = in;
210  std::sort(t.begin(), t.end());
211  return *(t.begin() + (in.size()/2));
212 }
213 
214 #define VBL_ATTRIBUTES_INSTANTIATE(T) \
215 template T minval(vbl_array_1d<T >const&); \
216 template T maxval(vbl_array_1d<T >const&); \
217 template void bounds(vbl_array_1d<T >const&, T&, T&); \
218 template T mean(vbl_array_1d<T >const&); \
219 template T median(vbl_array_1d<T >const&); \
220 template T minval(vbl_array_2d<T >const&); \
221 template T maxval(vbl_array_2d<T >const&); \
222 template void bounds(vbl_array_2d<T >const&, T&, T&); \
223 template T mean(vbl_array_2d<T >const&); \
224 template T median(vbl_array_2d<T >const&); \
225 template T minval(vbl_array_3d<T >const&); \
226 template T maxval(vbl_array_3d<T >const&); \
227 template void bounds(vbl_array_3d<T >const&, T&, T&); \
228 template T mean(vbl_array_3d<T >const&); \
229 template T median(vbl_array_3d<T >const&)
230 
231 #endif // vbl_attributes_hxx_
simple 2D array.
Definition: vbl_array_2d.h:25
size_type size() const
Definition: vbl_array_1d.h:148
iterator end()
Definition: vbl_array_1d.h:142
A simple container.
Definition: vbl_array_1d.h:28
size_type size() const
Return size = (number of rows) * (number of columns).
Definition: vbl_array_2d.h:131
iterator begin()
Definition: vbl_array_2d.h:138
iterator end()
Definition: vbl_array_2d.h:139
size_type size() const
Definition: vbl_array_3d.h:131
T minval(vbl_array_1d< T > const &in)
minimum element value.
T median(vbl_array_1d< T > const &in)
median (actually: left-median) of element values.
iterator begin()
Definition: vbl_array_3d.h:135
Templated 3-dimensional array.
Definition: vbl_array_3d.h:38
void bounds(vbl_array_1d< T > const &in, T &min, T &max)
min max bounds.
T const * const_iterator
Definition: vbl_array_1d.h:39
T const * const_iterator
Definition: vbl_array_3d.h:52
iterator begin()
Definition: vbl_array_1d.h:141
iterator end()
Definition: vbl_array_3d.h:136
T maxval(vbl_array_1d< T > const &in)
maximum element value.
T const * const_iterator
Definition: vbl_array_2d.h:38
T mean(vbl_array_1d< T > const &in)
mean of element values.
Find summary attributes of an array.