Example #1
0
void generateIdentityMatrix(Matrix * const M)
{
  size_t rowInd, colInd;
  for (rowInd = 0; rowInd < M->rowSize; rowInd++)
  {
    for (colInd = 0; colInd < M->colSize; colInd++)
    {
      if(rowInd == colInd)
        setMatrixElement(M, rowInd, colInd, 1.0);
      else
        setMatrixElement(M, rowInd, colInd, 0.0);
    }
  }
}
Example #2
0
void generateZeroMatrix(Matrix * const M)
{
  size_t rowInd, colInd;
  for (rowInd = 0; rowInd < M->rowSize; rowInd++)
    for (colInd = 0; colInd < M->colSize; colInd++)
      setMatrixElement(M, rowInd, colInd, 0.0);
}
Example #3
0
void loadMatrix(const char * const fileName, Matrix * const M)
{
  int i, j, rows, cols;
  FILE * inFile;
  double value;

  destructMatrix(M);

	inFile = fopen(fileName, "r");
  if(NULL == inFile)
  {
    changeColor("magenta");
    printf("=[ I can't find %s\n", fileName);
    return;
  }

	fscanf(inFile, "%i %i", &rows, &cols);
  M->rowSize = rows;
  M->colSize = cols;
  M->grid = (double *) calloc(rows * cols, sizeof(double));

  for(i = 0; i < rows; i++)
  {
    for(j = 0; j < cols; j++)
    {
      fscanf(inFile, "%lg", &value);
      setMatrixElement(M, i, j, value);
    }
  }

	fclose(inFile);
}
Example #4
0
Matrix *formMatrixFromFloatVal(const lbfgsfloatval_t *x, size_t nrow, size_t ncol) {
    Matrix *m = createMatrix(nrow, ncol);
    for(size_t i=0; i<nrow; i++) {
        for(size_t j=0; j<ncol; j++) {
            setMatrixElement(m, i, j, x[j*nrow + i]);
        }
    }
    return(m);
}
Example #5
0
void generateRandomMatrix(Matrix * const M)
{
  size_t rowInd, colInd;
  int lowerBound, upperBound;

  lowerBound = -10;
  upperBound = 10;

  for (rowInd = 0; rowInd < M->rowSize; rowInd++)
  {
    for (colInd = 0; colInd < M->colSize; colInd++)
    {
      double randomValue = lowerBound + (rand() % (upperBound - lowerBound)) + 1;
      setMatrixElement(M, rowInd, colInd, randomValue);
    }
  }
}
Example #6
0
Matrix* processThroughReceptiveFields(Matrix *ts, const double *centers, const Constants *c) {
    Matrix *ts_out = createMatrix(c->M, ts->ncol);
//    printf("%d %d %d", c->M, ts->nrow, c->M % ts->nrow);
    assert(c->M % ts->nrow == 0);
    
    size_t neurons_per_ts = c->M / ts->nrow;
    size_t i, ri;
    for(i=0, ri=0; (i < c->M) && (ri < ts->nrow); i+=neurons_per_ts, ri++) {
        for(size_t ni=i; ni<(i+neurons_per_ts); ni++) {
            for(size_t vi=0; vi < ts->ncol; vi++) {
                double val = getMatrixElement(ts, ri, vi);                
                double val_field = c->preproc->gain * exp( - ((centers[ni] - val) * (centers[ni] - val))/c->preproc->sigma );
                setMatrixElement(ts_out, ni, vi, val_field);
            }
        }
    }
    return(ts_out);
}
Example #7
0
Matrix* calcErrorGrad(Matrix *y, Matrix *w, doubleVector *target, int jobs) {
    assert(y->ncol == target->size);

    pthread_t *threads = (pthread_t *) malloc( jobs * sizeof( pthread_t ) );
    FiltWorker *workers = (FiltWorker*) malloc( jobs * sizeof(FiltWorker) );
    
    for(size_t wi=0; wi < jobs; wi++) {
        int points_per_thread = (y->ncol + jobs - 1) / jobs;
        workers[wi].first = min( wi    * points_per_thread, y->ncol );
        workers[wi].last  = min( (wi+1) * points_per_thread, y->ncol );
        workers[wi].y = y;
        workers[wi].w = w;
        workers[wi].target = target;
    }
    for( int i = 0; i < jobs; i++ )  {
        P( pthread_create( &threads[i], NULL, error_grad_routine,  &workers[i]) );
    }
    for( int i = 0; i < jobs; i++ )  {
        P( pthread_join( threads[i], NULL) );
    }

    Matrix *dedw = createZeroMatrix(w->nrow, w->ncol);
    for( size_t wi=0; wi< jobs; wi++) {
        for(size_t i=0; i<dedw->nrow; i++) {
            for(size_t j=0; j<dedw->ncol; j++) {
                incMatrixElement(dedw, i, j, getMatrixElement(workers[wi].dedw, i, j));
            }
        }
    }
    for(size_t i=0; i<dedw->nrow; i++) {
        for(size_t j=0; j<dedw->ncol; j++) {
            double dedw_acc = getMatrixElement(dedw, i, j);
            setMatrixElement(dedw, i, j, dedw_acc/target->size);
        }
    }

    free(threads);
    free(workers);

    return dedw;
}