X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=code%2Fstage1%2Fsrc%2FAlgorithm%2Fpam.c;h=60e3efe49075a6828e8469028b42cf0480d8738e;hb=73d68777d709e054cf74e806e23b0bdefda9462a;hp=ecd72c390fc45b55e12ea403dd81032479436fbb;hpb=f9f51b6ab4c7280dd521da675353252d7b078984;p=epclust.git diff --git a/code/stage1/src/Algorithm/pam.c b/code/stage1/src/Algorithm/pam.c index ecd72c3..60e3efe 100644 --- a/code/stage1/src/Algorithm/pam.c +++ b/code/stage1/src/Algorithm/pam.c @@ -27,11 +27,11 @@ static void sample(uint32_t* v, uint32_t n, uint32_t k) // assign a vector (represented by its dissimilarities to others, as dissimilarities[index,]) // to a cluster, represented by its center ==> output is integer in 0..K-1 -static uint32_t assignCluster(uint32_t index, Real* dissimilarities, +static uint32_t assignCluster(uint32_t index, float* dissimilarities, uint32_t* centers, uint32_t n, uint32_t K) { uint32_t minIndex = 0; - Real minDist = dissimilarities[index * n + centers[0]]; + float minDist = dissimilarities[index * n + centers[0]]; for (uint32_t j = 1; j < K; j++) { @@ -46,8 +46,8 @@ static uint32_t assignCluster(uint32_t index, Real* dissimilarities, } // assign centers given a clustering, and also compute corresponding distortion -static void assign_centers(uint32_t nbClusters, Vector** clusters, Real* dissimilarities, - uint32_t nbItems, uint32_t* ctrs, Real* distor) +static void assign_centers(uint32_t nbClusters, Vector** clusters, float* dissimilarities, + uint32_t nbItems, uint32_t* ctrs, float* distor) { *distor = 0.0; // TODO [heuristic]: checking only a neighborhood of the former center ? @@ -55,13 +55,13 @@ static void assign_centers(uint32_t nbClusters, Vector** clusters, Real* dissimi { // If the cluster is empty, choose a center at random (pathological case...) uint32_t minIndex = get_rand_int() % nbItems; - Real minSumDist = INFINITY; + float minSumDist = INFINITY; for (uint32_t i = 0; i < vector_size(clusters[j]); i++) { uint32_t index1; vector_get(clusters[j], i, index1); // attempt to use current index as center - Real sumDist = 0.0; + float sumDist = 0.0; for (uint32_t ii = 0; ii < vector_size(clusters[j]); ii++) { uint32_t index2; @@ -80,7 +80,7 @@ static void assign_centers(uint32_t nbClusters, Vector** clusters, Real* dissimi } // Core PAM algorithm from a dissimilarity matrix; (e.g. nstart=10, maxiter=100) -void pam(Real* dissimilarities, uint32_t nbItems, uint32_t nbClusters, int clustOnMedoids, +void pam(float* dissimilarities, uint32_t nbItems, uint32_t nbClusters, int clustOnMedoids, uint32_t nbStart, uint32_t maxNbIter, Result_t* result) { uint32_t* ctrs = result->medoids_ranks; //shorthand @@ -93,7 +93,7 @@ void pam(Real* dissimilarities, uint32_t nbItems, uint32_t nbClusters, int clust bestClusts[j] = vector_new(uint32_t); } - Real lastDistor, distor, bestDistor = INFINITY; + float lastDistor, distor, bestDistor = INFINITY; for (uint32_t startKount = 0; startKount < nbStart; startKount++) { // centers (random) [re]initialization