static void gaussian_kernel(ntuple_list kernel, float sigma, float mean) { float sum = 0.0; //float val; unsigned int i; /* check parameters */ // if( kernel == NULL || kernel->values == NULL ) // error("gaussian_kernel: invalid n-tuple 'kernel'."); // if( sigma <= 0.0 ) error("gaussian_kernel: 'sigma' must be positive."); /* compute Gaussian kernel */ if( kernel->max_size < 1 ) enlarge_ntuple_list(kernel); kernel->size = 1; for(i=0;i<kernel->dim;i++) { // val = ( (float) i - mean ) / sigma; // kernel->values[i] = exp( -0.5 * val * val ); kernel->values[i] = exp( -0.5 * (( (float) i - mean ) / sigma) * (( (float) i - mean ) / sigma) ); sum += kernel->values[i]; } /* normalization */ if( sum >= 0.0 ) for(i=0;i<kernel->dim;i++) kernel->values[i] /= sum; }
/** Add a 1-tuple to an 1-tuple list. */ static void add_1tuple( ntuple_list out, double v1) { /* check parameters */ if( out == NULL ) error("add_1tuple: invalid n-tuple input."); if( out->dim != 1 ) error("add_1tuple: the n-tuple must be a 1-tuple."); /* if needed, alloc more tuples to 'out' */ if( out->size == out->max_size ) enlarge_ntuple_list(out); if( out->values == NULL ) error("add_2tuple: invalid n-tuple input."); /* add new 2-tuple */ out->values[ out->size * out->dim] = v1; /* update number of tuples counter */ out->size++; }
/** Copy ntuple_list */ static void copy_ntuple(ntuple_list src, ntuple_list des) { /* check parameters */ if( src == NULL ) error("copy_ntuple: invalid n-tuple input."); if( des == NULL ) error("copy_ntuple: invalid n-tuple input."); if( src->dim != des->dim ) error("copy_ntuple: different dimension of input."); int i, j, nb, dim; nb = src->size; dim = src->dim; des->size = 0; for(i = 0; i < nb; i++) { if(des->size == des->max_size) enlarge_ntuple_list(des); for(j = 0; j < dim; j++) des->values[i*dim+j] = src->values[i*dim+j]; des->size++; } }