Example #1
0
/**
* This application groups 'num_points' row-vectors (which are randomly
* generated) into 'num_means' clusters through an iterative algorithm - the
* k-means algorith
*/
int main(int argc, char **argv)
{

    int **points;
    int **means;
    int *clusters;

    int i;

    parse_args(argc, argv);
    points = (int **)malloc(sizeof(int *) * num_points);
    for (i=0; i<num_points; i++)
    {
        points[i] = (int *)malloc(sizeof(int) * dim);
    }
    dprintf("Generating points\n");
    generate_points(points, num_points);

    means = (int **)malloc(sizeof(int *) * num_means);
    for (i=0; i<num_means; i++)
    {
        means[i] = (int *)malloc(sizeof(int) * dim);
    }
    dprintf("Generating means\n");
    generate_points(means, num_means);

    clusters = (int *)malloc(sizeof(int) * num_points);
    memset(clusters, -1, sizeof(int) * num_points);

    modified = true;



    dprintf("\n\nStarting iterative algorithm\n");


    while (modified)
    {
        modified = false;
        dprintf(".");

        find_clusters(points, means, clusters);
        calc_means(points, means, clusters);
    }


    dprintf("\n\nFinal Means:\n");
    dump_matrix(means, num_means, dim);

    dprintf("Cleaning up\n");
    for (i=0; i<num_means; i++) {
        free(means[i]);
    }
    free(means);
    for (i=0; i<num_points; i++) {
        free(points[i]);
    }
    free(points);
    return 0;
}
Example #2
0
void regression(point *points, size_t point_count, transform_t t,
        double *slope, double *intercept) {
    assert(slope);
    assert(intercept);

    double mx = 0;
    double my = 0;
    if (!calc_means(points, point_count, t, &mx, &my)) {
        *slope = EMPTY_VALUE;
        *intercept = EMPTY_VALUE;
        return;
    }

    double num = calc_num(points, point_count, t, mx, my);
    double den = calc_den(points, point_count, t, mx);
    *slope = num / den;
    *intercept = my - *slope * mx;

    LOG(1, "-- slope: %g, intercept: %g\n", *slope, *intercept);
}
Example #3
0
/** 
* This application groups 'num_points' row-vectors (which are randomly
* generated) into 'num_means' clusters through an iterative algorithm - the 
* k-means algorith 
*/
int main(int argc, char **argv) 
{

    int **points;
    int **means;
    int *clusters;
    
    int i;
    struct timeval begin, end;

    parse_args(argc, argv);
    points = (int **)malloc(sizeof(int *) * num_points);
    for (i=0; i<num_points; i++) 
    {
        points[i] = (int *)malloc(sizeof(int) * dim);
    }
    dprintf("Generating points\n");
    generate_points(points, num_points);    

    means = (int **)malloc(sizeof(int *) * num_means);
    for (i=0; i<num_means; i++) 
    {
        means[i] = (int *)malloc(sizeof(int) * dim);
    }
    dprintf("Generating means\n");
    generate_points(means, num_means);
    
    clusters = (int *)malloc(sizeof(int) * num_points);
    memset(clusters, -1, sizeof(int) * num_points);
    
    modified = true;
    
    
    
    dprintf("\n\nStarting iterative algorithm\n");
    
    
    get_time (&begin);
    while (modified) 
    {
        modified = false;
        dprintf(".");
        
        find_clusters(points, means, clusters);
        calc_means(points, means, clusters);
    }
    get_time (&end);

#ifdef TIMING
    fprintf (stderr, "library: %u\n", time_diff (&end, &begin));
#endif

    
    dprintf("\n\nFinal Means:\n");
    dump_matrix(means, num_means, dim);
    
    dprintf("Cleaning up\n");
    for (i=0; i<num_means; i++) {
        free(means[i]);
    }
    free(means);
    for (i=0; i<num_points; i++) {
        free(points[i]);
    }
    free(points);
    return 0;  
}