/** * 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; }
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); }
/** * 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; }