Exemple #1
0
static MLPGPARA xmlpgpara_init(int dim, int dim2, int dnum, 
                               int clsnum)
{
    MLPGPARA param;
    
    // memory allocation
    param = mlpg_alloc(1,struct MLPGPARA_STRUCT);
    param->ov = xdvalloc(dim);
    param->iuv = NODATA;
    param->iumv = NODATA;
    param->flkv = xdvalloc(dnum);
    param->stm = NODATA;
    param->dltm = xdmalloc(dnum, dim2);
    param->pdf = NODATA;
    param->detvec = NODATA;
    param->wght = xdmalloc(clsnum, 1);
    param->mean = xdmalloc(clsnum, dim);
    param->cov = NODATA;
    param->clsidxv = NODATA;
    /* dia_flag */
	param->clsdetv = xdvalloc(1);
	param->clscov = xdmalloc(1, dim);

    param->vdet = 1.0;
    param->vm = NODATA;
    param->vv = NODATA;
    param->var = NODATA;

    return param;
}
Exemple #2
0
static void sm_mvav(DMATRIX mat, long hlen)
{
    long k, l, m, p;
    double d, sd;
    DVECTOR vec = NODATA;
    DVECTOR win = NODATA;

    vec = xdvalloc(mat->row);

    // smoothing window
    win = xdvalloc(hlen * 2 + 1);
    for (k = 0, d = 1.0, sd = 0.0; k < hlen; k++, d += 1.0) {
	win->data[k] = d;	win->data[win->length - k - 1] = d;
	sd += d + d;
    }
    win->data[k] = d;	sd += d;
    for (k = 0; k < win->length; k++) win->data[k] /= sd;

    for (l = 0; l < mat->col; l++) {
	for (k = 0; k < mat->row; k++) {
	    for (m = 0, vec->data[k] = 0.0; m < win->length; m++) {
		p = k - hlen + m;
		if (p >= 0 && p < mat->row)
		    vec->data[k] += mat->data[p][l] * win->data[m];
	    }
	}
	for (k = 0; k < mat->row; k++) mat->data[k][l] = vec->data[k];
    }

    xdvfree(win);
    xdvfree(vec);

    return;
}
Exemple #3
0
// diagonal covariance
static DVECTOR xget_detvec_diamat2inv(DMATRIX covmat)	// [num class][dim]
{
    long dim, clsnum;
    long i, j;
    double det;
    DVECTOR detvec = NODATA;

    clsnum = covmat->row;
    dim = covmat->col;
    // memory allocation
    detvec = xdvalloc(clsnum);
    for (i = 0; i < clsnum; i++) {
	for (j = 0, det = 1.0; j < dim; j++) {
	    det *= covmat->data[i][j];
	    if (det > 0.0) {
		covmat->data[i][j] = 1.0 / covmat->data[i][j];
	    } else {
		cst_errmsg("error:(class %ld) determinant <= 0, det = %f\n", i, det);
                xdvfree(detvec);
		return NODATA;
	    }
	}
	detvec->data[i] = det;
    }

    return detvec;
}
Exemple #4
0
DVECTOR xdvinit(double j, double incr, double n)
{
    long k;
    long num;
    DVECTOR x;

    if ((incr > 0.0 && j > n) || (incr < 0.0 && j < n)) {
	x = xdvnull();
	return x;
    }
    if (incr == 0.0) {
	num = (long)n;
	if (num <= 0) {
	    x = xdvnull();
	    return x;
	}
    } else {
	num = LABS((long)((n - j) / incr)) + 1;
    }
    
    /* memory allocate */
    x = xdvalloc(num);

    /* initailize data */
    for (k = 0; k < x->length; k++) {
	x->data[k] = j + (k * incr);
    }

    return x;
}
Exemple #5
0
DVECTOR xdvcut(DVECTOR x, long offset, long length)
{
    long k;
    long pos;
    DVECTOR y;
    
    y = xdvalloc(length);
    if (x->imag != NULL) {
	dvialloc(y);
    }

    for (k = 0; k < y->length; k++) {
	pos = k + offset;
	if (pos >= 0 && pos < x->length) {
	    y->data[k] = x->data[pos];
	    if (y->imag != NULL) {
		y->imag[k] = x->imag[pos];
	    }
	} else {
	    y->data[k] = 0.0;
	    if (y->imag != NULL) {
		y->imag[k] = 0.0;
	    }
	}
    }

    return y;
}