comparison maths/MathUtilities.cpp @ 34:ad645e404d0c

* Add range of normalise options to chromagram * bit of tidying
author cannam
date Tue, 22 Jan 2008 17:27:07 +0000
parents 2e3f5d2d62c1
children 5bec06ecc88a
comparison
equal deleted inserted replaced
33:499d438b52ba 34:ad645e404d0c
217 int MathUtilities::compareInt (const void * a, const void * b) 217 int MathUtilities::compareInt (const void * a, const void * b)
218 { 218 {
219 return ( *(int*)a - *(int*)b ); 219 return ( *(int*)a - *(int*)b );
220 } 220 }
221 221
222 void MathUtilities::normalise(double *data, int length, NormaliseType type)
223 {
224 switch (type) {
225
226 case NormaliseNone: return;
227
228 case NormaliseUnitSum:
229 {
230 double sum = 0.0;
231 for (int i = 0; i < length; ++i) {
232 sum += data[i];
233 }
234 if (sum != 0.0) {
235 for (int i = 0; i < length; ++i) {
236 data[i] /= sum;
237 }
238 }
239 }
240 break;
241
242 case NormaliseUnitMax:
243 {
244 double max = 0.0;
245 for (int i = 0; i < length; ++i) {
246 if (fabs(data[i]) > max) {
247 max = fabs(data[i]);
248 }
249 }
250 if (max != 0.0) {
251 for (int i = 0; i < length; ++i) {
252 data[i] /= max;
253 }
254 }
255 }
256 break;
257
258 }
259 }
260
261 void MathUtilities::normalise(std::vector<double> &data, NormaliseType type)
262 {
263 switch (type) {
264
265 case NormaliseNone: return;
266
267 case NormaliseUnitSum:
268 {
269 double sum = 0.0;
270 for (int i = 0; i < data.size(); ++i) sum += data[i];
271 if (sum != 0.0) {
272 for (int i = 0; i < data.size(); ++i) data[i] /= sum;
273 }
274 }
275 break;
276
277 case NormaliseUnitMax:
278 {
279 double max = 0.0;
280 for (int i = 0; i < data.size(); ++i) {
281 if (fabs(data[i]) > max) max = fabs(data[i]);
282 }
283 if (max != 0.0) {
284 for (int i = 0; i < data.size(); ++i) data[i] /= max;
285 }
286 }
287 break;
288
289 }
290 }
291
292
293