int main(void){ int *a[10]; int n = 10; int sum = mallocArray(a, n); printArray(a, sum); freeArray(a, sum); }
/* calculate PLN output (for the pain management project, we limit to two outputs PDA and OSW) */ void get_PLN_output(double *x_in, const struct PlnWeights *pln, double *PDA, double *OSW) { double *y; double *x; int k; int n, m; x = mallocArray(pln->N); y = mallocArray(pln->M); preProcess(x_in, pln, x); k = get_PLN_cluster_membership(x, pln); dprintf("k=%d\n", k); for(m=0; m<pln->M; m++) { dprintf("m=%d\n", m); y[m] = pln->W[k][m][0]; for(n=1; n<pln->N+1; n++) { y[m] += x[n-1]*pln->W[k][m][n]; } } *PDA = y[0]; *OSW = y[1]; free(x); free(y); }
/* read PLN weights text file. Instead of reading from text file, the values can be directly coded into the structure */ void readPlnWeights(char *fname, struct PlnWeights *pln) { int cnt = 0; int n, m, k; FILE *fp = NULL; fp = fopen(fname, "r"); if(!fp) { printf("Unable to open file to load PLN.\n"); exit(0); } cnt = fscanf(fp, "PLN\n"); cnt = fscanf(fp, "K\n%d\n", &pln->Nc); cnt = fscanf(fp, "N\n%d\n", &pln->N); cnt = fscanf(fp, "M\n%d\n", &pln->M); pln->distanceMeasure = mallocArray(pln->N); cnt = fscanf(fp, "DistanceMeasure\n"); dprintf0("DistanceMeasure\n"); for(n=0; n<pln->N; n++) { cnt = fscanf(fp, "%lf ", &pln->distanceMeasure[n]); dprintf("%e ", pln->distanceMeasure[n]); } dprintf0("\n"); pln->inputMeans = mallocArray(pln->N); cnt = fscanf(fp, "InputMeans\n"); dprintf0("InputMeans\n"); for(n=0; n<pln->N; n++) { cnt = fscanf(fp, "%lf ", &pln->inputMeans[n]); dprintf("%e ", pln->inputMeans[n]); } dprintf0("\n"); pln->inputStd = mallocArray(pln->N); cnt = fscanf(fp, "InputStd\n"); dprintf0("InputStd\n"); for(n=0; n<pln->N; n++) { cnt = fscanf(fp, "%lf ", &pln->inputStd[n]); dprintf("%e ", pln->inputStd[n]); } dprintf0("\n"); pln->Nv = (int*)malloc(pln->Nc*sizeof(int)); pln->clusterCenters = mallocMatrix(pln->Nc, pln->N); pln->R = (double***)malloc(pln->Nc*sizeof(double**)); pln->C = (double***)malloc(pln->Nc*sizeof(double**)); pln->W = (double***)malloc(pln->Nc*sizeof(double**)); pln->Et = mallocMatrix(pln->Nc, pln->M); pln->lambda = mallocArray(pln->Nc); for(k=0; k<pln->Nc; k++) { int idx; cnt = fscanf(fp, "ClusterIndex\n%d\n", &idx); dprintf("Reading cluster %d\n", idx); if(k!=idx) { printf("Invalid file.\n"); exit(0); } cnt = fscanf(fp, "Nv\n%d\n", &pln->Nv[k]); dprintf("Nv = %d\n", pln->Nv[k]); cnt = fscanf(fp, "CenterVector\n"); dprintf0("CenterVector\n"); for(n=0; n<pln->N; n++) { cnt = fscanf(fp, "%lf ", &pln->clusterCenters[k][n]); dprintf("%e ", pln->clusterCenters[k][n]); } cnt = fscanf(fp, "\n"); dprintf0("\n"); pln->R[k] = mallocMatrix(pln->N+1, pln->N+1); dprintf0("R\n"); cnt = fscanf(fp, "R\n"); for(n=0; n<pln->N+1; n++) { for(m=0; m<pln->N+1; m++) { cnt = fscanf(fp, "%lf ", &pln->R[k][n][m]); dprintf("%e ", pln->R[k][n][m]); } cnt = fscanf(fp, "\n"); } dprintf0("\n"); pln->C[k] = mallocMatrix(pln->M, pln->N+1); cnt = fscanf(fp, "C\n"); dprintf0("C\n"); for(n=0; n<pln->M; n++) { for(m=0; m<pln->N+1; m++) { cnt = fscanf(fp, "%lf ", &pln->C[k][n][m]); dprintf("%e ", pln->C[k][n][m]); } cnt = fscanf(fp, "\n"); } dprintf0("\n"); pln->W[k] = mallocMatrix(pln->M, pln->N+1); cnt = fscanf(fp, "W\n"); dprintf0("W\n"); for(n=0; n<pln->M; n++) { for(m=0; m<pln->N+1; m++) { cnt = fscanf(fp, "%lf ", &pln->W[k][n][m]); dprintf("%e ", pln->W[k][n][m]); } cnt = fscanf(fp, "\n"); } dprintf0("\n"); cnt = fscanf(fp, "Et\n"); dprintf0("Et\n"); for(n=0; n<pln->M; n++) { cnt = fscanf(fp, "%lf ", &pln->Et[k][n]); dprintf("%e ", pln->Et[k][n]); } cnt = fscanf(fp, "\n"); dprintf0("\n"); cnt = fscanf(fp, "lambda\n%lf\n", &pln->lambda[k]); dprintf("lambda\n%lf\n", pln->lambda[k]); } cnt = fscanf(fp, "EOF\n"); fclose(fp); }