ivec sort_index(const Array1D<T>& data) { int N=data.length(),i; ivec indexlist(N); for(i=0;i<N;i++) { indexlist(i)=i; } QSindex(0,N-1,indexlist,data); return indexlist; }
void displaycurvalue() { if(display) // extract display name from list { char *val = indexlist(display, value-min_); copystring(curval, val); delete[] val; } else itoa(curval, value); // display number only }
vec sqtrain(const vec &inDB, int SIZE) { vec DB(inDB); vec Levels, Levels_old; ivec indexlist(SIZE + 1); int il, im, ih, i; int SIZEDB = inDB.length(); double x; sort(DB); Levels = DB(round_i(linspace(0.01 * SIZEDB, 0.99 * SIZEDB, SIZE))); Levels_old = zeros(SIZE); while (energy(Levels - Levels_old) > 0.0001) { Levels_old = Levels; for (i = 0;i < SIZE - 1;i++) { x = (Levels(i) + Levels(i + 1)) / 2; il = 0; ih = SIZEDB - 1; while (il < ih - 1) { im = (il + ih) / 2; if (x < DB(im)) ih = im; else il = im; } indexlist(i + 1) = il; } indexlist(0) = -1; indexlist(SIZE) = SIZEDB - 1; for (i = 0;i < SIZE;i++) Levels(i) = mean(DB(indexlist(i) + 1, indexlist(i + 1))); } return Levels; }