#include <gsl/gsl_permutation.h>
#include <gsl/gsl_sort_vector.h>
#include <gsl/gsl_statistics.h>
-#include <math.h>
#include <stdio.h>
#include <stdlib.h>
}
}
- 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;
}
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 */
}
}
- return sqrt (mindist);
+ return mindist;
}
dist += pow2 (gsl_matrix_get (kmeans->centers, i, j) - val->f);
}
- dist = sqrt (dist);
if (dist < mindist0)
{
{
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);
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);
{
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)
{
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)
{
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)
{
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"))