void matrixaddsub()
{
	int i,j,m,n,cho; float a[25][25],b[25][25];
	printf("Enter the dimension of Matrix as MXN");
	scanf("%d %d",&m,&n);
	printf("Enter the element of 1st Matrix\n");
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%f",&a[i][j]);
		}
	}
	printf("Enter the element of 2nd Matrix\n");
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%f",&b[i][j]);
		}
	}
	printf("1.Calculate Matrix Addition.\n");
	printf("2.Calculate Matrix Subtraction.\n");
	scanf("%d",&cho);

	switch(cho)
	{
		case 1:

			matrixadd(a,b,m,n);
			break;
		case 2:

			matrixsub(a,b,m,n);
			break;
	}

}
Esempio n. 2
0
int
accum_gauden(float32 ***denacc,
	     uint32 *lcl2gbl,
	     uint32 n_lcl2gbl,
	     vector_t *frame,
	     uint32 ***den_idx,
	     gauden_t *g,
	     int32 mean_reest,
	     int32 var_reest,
	     int32 pass2var,
	     float32 ***wacc,
	     int32 var_is_full,
	     FILE *pdumpfh,
	     float32 ***lda)
{
    uint32 g_i, i, j, k, kk, l;

    vector_t ***macc = g->l_macc;	/* local to utt */
    vector_t m;
    vector_t ***mean = g->mean;
    vector_t pm = NULL;

    vector_t ***vacc = g->l_vacc;
    vector_t v = NULL;

    vector_t ****fullvacc = g->l_fullvacc;
    vector_t *fv = NULL;
    vector_t *cov = NULL;
    vector_t dvec = NULL;

    float32 ***dnom = g->l_dnom;

    float32 diff;
    float32 obs_cnt;
    vector_t feat = NULL;

    /* Apply LDA if desired. */
    if (lda) {
	    /* Note that we ignore -ldadim here, because it's rather
	     * complicated to change the length of veclen for the
	     * output only. */
	    lda_transform(&frame, 1, lda, g->veclen[0], g->veclen[0]);
    }

    /* for each density family found in the utterance */
    for (i = 0; i < n_lcl2gbl; i++) {

	g_i = lcl2gbl[i];

	/* for each feature */
	for (j = 0; j < gauden_n_feat(g); j++) {

	    feat = frame[j];

	    if (var_is_full) {
		ckd_free_2d((void **)cov);
		cov = (vector_t *)ckd_calloc_2d(g->veclen[j], g->veclen[j], sizeof(float32));
		ckd_free(dvec);
		dvec = ckd_calloc(g->veclen[j], sizeof(float32));
	    }

	    /* for each density in the mixture density */
	    for (kk = 0; kk < gauden_n_top(g); kk++) {
		
		k = den_idx[i][j][kk];	/* i.e. density k is one of the n_top densities */
		
		obs_cnt = denacc[i][j][k];	/* observation count for density (k) at this time frame
						   given the model */
		
		/* don't bother adding a bunch of
		   essentially zero values */
		if (obs_cnt <= MIN_POS_FLOAT32)
		    continue;

#ifdef ACCUM_VERBOSE
		printf("denacc[%u][%u][%3u] == %.3e\n", i, j, k, obs_cnt);
#endif
		if (pdumpfh)
			fprintf(pdumpfh, "%u %u %u %g\n", lcl2gbl[i], j, k, obs_cnt);

		m = macc[i][j][k];	/* the vector accumulator for mean (i,j,k) */

		if (pass2var) {
		    g_i = lcl2gbl[i];
		    pm = mean[g_i][j][k];	/* the mean (i, j, k) */
		}

		if (var_reest) {
		    if (var_is_full)
			fv = fullvacc[i][j][k];
		    else
			v = vacc[i][j][k];	/* the vector accumulator for variance (i,j,k) */
		}

		if (var_reest && var_is_full) {
		    if (!pass2var)
			outerproduct(cov, feat, feat, g->veclen[j]);
		    else {
			for (l = 0; l < g->veclen[j]; ++l)
			    dvec[l] = feat[l] - pm[l];
			outerproduct(cov, dvec, dvec, g->veclen[j]);
		    }
		    scalarmultiply(cov, obs_cnt, g->veclen[j], g->veclen[j]);
		    matrixadd(fv, cov, g->veclen[j], g->veclen[j]);
		}
		for (l = 0; l < g->veclen[j]; l++) {
		    if (mean_reest) {
			m[l] += obs_cnt * feat[l];
		    }

		    if (var_reest && !var_is_full) {
			/* Always reest vars on untransformed features for now */
		        /* This does NOT work with -2passvar no (for pretty obvious reasons) */
			if (!pass2var)
			    v[l] += obs_cnt * feat[l] * feat[l];
			else {
			    diff = feat[l] - pm[l];
			    
			    diff *= diff;
			    v[l] += obs_cnt * diff;
			}
		    }
		}
		/* accumulate observation count for all densities */
		dnom[i][j][k] += obs_cnt;
	    }
	    if (var_is_full) {
		ckd_free_2d((void **)cov);
		cov = NULL;
		ckd_free(dvec);
		dvec = NULL;
	    }
	}
    }

    if (pdumpfh)
	    fputs("\n", pdumpfh);

    return S3_SUCCESS;
}