Example #1
0
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++;
  }
}