X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fquick-cluster.c;h=ff008db08aa73e7dec233a6dac0515f6d9f37ad5;hb=7293c1a383d325c371bd708401e5a1d7586a4d90;hp=4f34e4f0a8ef0eabcb955d4eb1588d634264f33e;hpb=e8fd8bbc19102dd21c25433d9c410ccb174931db;p=pspp diff --git a/src/language/stats/quick-cluster.c b/src/language/stats/quick-cluster.c index 4f34e4f0a8..ff008db08a 100644 --- a/src/language/stats/quick-cluster.c +++ b/src/language/stats/quick-cluster.c @@ -20,7 +20,6 @@ #include #include #include -#include #include #include @@ -187,21 +186,7 @@ matrix_mindist (const gsl_matrix *m, int *mn, int *mm) } } - return sqrt (mindist); -} - - -static void -dump_matrix (const gsl_matrix *m) -{ - size_t i, j; - - for (i = 0 ; i < m->size1; ++i) - { - for (j = 0 ; j < m->size2; ++j) - printf ("%02f ", gsl_matrix_get (m, i, j)); - printf ("\n"); - } + return mindist; } @@ -220,7 +205,7 @@ dist_from_case (const struct Kmeans *kmeans, const struct ccase *c, const struct dist += pow2 (gsl_matrix_get (kmeans->centers, which, j) - val->f); } - return sqrt (dist); + return dist; } /* Return the minimum distance of the group WHICH and all other groups */ @@ -247,7 +232,7 @@ min_dist_from (const struct Kmeans *kmeans, const struct qc *qc, int which) } } - return sqrt (mindist); + return mindist; } @@ -349,7 +334,6 @@ kmeans_get_nearest_group (const struct Kmeans *kmeans, struct ccase *c, const st dist += pow2 (gsl_matrix_get (kmeans->centers, i, j) - val->f); } - dist = sqrt (dist); if (dist < mindist0) { @@ -475,13 +459,12 @@ kmeans_cluster (struct Kmeans *kmeans, struct casereader *reader, const struct q { kmeans->n = 0; - int i; /* Step 3 */ gsl_vector_long_set_all (kmeans->num_elements_groups, 0.0); gsl_matrix_set_all (kmeans->updated_centers, 0.0); struct ccase *c; struct casereader *cs = casereader_clone (reader); - for (; (c = casereader_read (cs)) != NULL; i++, case_unref (c)) + for (; (c = casereader_read (cs)) != NULL; case_unref (c)) { int group = -1; kmeans_get_nearest_group (kmeans, c, qc, &group, NULL, NULL, NULL); @@ -499,8 +482,6 @@ kmeans_cluster (struct Kmeans *kmeans, struct casereader *reader, const struct q long *n = gsl_vector_long_ptr (kmeans->num_elements_groups, group); *n += qc->wv ? case_data (c, qc->wv)->f : 1.0; kmeans->n++; - - } casereader_destroy (cs); @@ -754,9 +735,9 @@ cmd_quick_cluster (struct lexer *lexer, struct dataset *ds) { if (lex_match_id (lexer, "CLUSTERS")) { - if (lex_force_match (lexer, T_LPAREN)) + if (lex_force_match (lexer, T_LPAREN) && + lex_force_int (lexer)) { - lex_force_int (lexer); qc.ngroups = lex_integer (lexer); if (qc.ngroups <= 0) { @@ -764,14 +745,15 @@ cmd_quick_cluster (struct lexer *lexer, struct dataset *ds) goto error; } lex_get (lexer); - lex_force_match (lexer, T_RPAREN); + if (!lex_force_match (lexer, T_RPAREN)) + goto error; } } else if (lex_match_id (lexer, "CONVERGE")) { - if (lex_force_match (lexer, T_LPAREN)) + if (lex_force_match (lexer, T_LPAREN) && + lex_force_num (lexer)) { - lex_force_num (lexer); qc.epsilon = lex_number (lexer); if (qc.epsilon <= 0) { @@ -779,14 +761,15 @@ cmd_quick_cluster (struct lexer *lexer, struct dataset *ds) goto error; } lex_get (lexer); - lex_force_match (lexer, T_RPAREN); + if (!lex_force_match (lexer, T_RPAREN)) + goto error; } } else if (lex_match_id (lexer, "MXITER")) { - if (lex_force_match (lexer, T_LPAREN)) + if (lex_force_match (lexer, T_LPAREN) && + lex_force_int (lexer)) { - lex_force_int (lexer); qc.maxiter = lex_integer (lexer); if (qc.maxiter <= 0) { @@ -794,7 +777,8 @@ cmd_quick_cluster (struct lexer *lexer, struct dataset *ds) goto error; } lex_get (lexer); - lex_force_match (lexer, T_RPAREN); + if (!lex_force_match (lexer, T_RPAREN)) + goto error; } } else if (lex_match_id (lexer, "NOINITIAL"))