示例#1
0
文件: a1.c 项目: yashendaoren/c-
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);
}