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; } }
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; }