/* OutConMat: output the confusion matrix */ void OutConMat(void) { Boolean *seen; int i,j,k,err,rowerr,maxlen; char *s,c,buf[64]; float correct, errprop; seen=(Boolean*)New(&tempHeap,sizeof(Boolean)*nLabs); seen--; maxlen = 0; for (i=1;i<=nLabs;i++) { k = strlen(names[i]->name); if (k > maxlen) maxlen = k; } if (maxlen>MAXWORDLEN) maxlen = MAXWORDLEN; PrintBar(0,htkWidth,'-',"Confusion Matrix"); for (j=1; j<=nLabs; j++) { for (i=1,k=conIns[j];i<=nLabs;i++) k+=conMat[i][j]; if (k==0) seen[j]=FALSE; else seen[j]=TRUE; } for (j=0;jname; c = (jname); buf[4] = '\0'; printf("%4s ",buf); rowerr = 0; for (j=1; j<=nLabs; j++){ if (!seen[j]) continue; err = conMat[i][j]; if (i!=j) rowerr += err; if (err<100) printf(" %2d ",err); else printf("%4d",err); } printf("%4d",conDel[i]); if (rowerr>0) { correct = 100.0*(float)conMat[i][i]/(float)(conMat[i][i]+rowerr); errprop = 100.0*(float)rowerr/(float)nsyms; printf(" [%4.1f/%3.1f]\n",correct,errprop); } else printf("\n"); } printf("Ins "); for (j=1; j<=nLabs; j++) { if (!seen[j]) continue; printf("%4d",conIns[j]); } printf("\n"); seen++; Dispose(&tempHeap,seen);