- indices_workers = .spreadIndices(indices, nb_series_per_chunk)
- if (parll)
- indices = unlist( parallel::parLapply(cl, indices_workers, wrapComputeClusters1) )
- else
- indices = unlist( lapply(indices_workers, wrapComputeClusters1) )
- }
- if (parll)
- parallel::stopCluster(cl)
-
- indices #medoids
-}
-
-#' @rdname clustering
-#' @export
-clusteringTask2 = function(medoids, K2,
- getRefSeries, nb_ref_curves, nb_series_per_chunk, ncores_clust=1,verbose=FALSE,parll=TRUE)
-{
- if (nrow(medoids) <= K2)
- return (medoids)
- synchrones = computeSynchrones(medoids,
- getRefSeries, nb_ref_curves, nb_series_per_chunk, ncores_clust, verbose, parll)
- distances = computeWerDists(synchrones, ncores_clust, verbose, parll)
- # PAM in package 'cluster' cannot take big.matrix in input: need to cast it
- mat_dists = matrix(nrow=K1, ncol=K1)
- for (i in seq_len(K1))
- mat_dists[i,] = distances[i,]
- medoids[ computeClusters2(mat_dists,K2), ]
-}
-
-#' @rdname clustering
-#' @export
-computeClusters1 = function(contribs, K1)
- cluster::pam(contribs, K1, diss=FALSE)$id.med
-
-#' @rdname clustering
-#' @export
-computeClusters2 = function(distances, K2)
- cluster::pam(distances, K2, diss=TRUE)$id.med
-
-#' computeSynchrones
-#'
-#' Compute the synchrones curves (sum of clusters elements) from a matrix of medoids,
-#' using L2 distances.
-#'
-#' @param medoids big.matrix of medoids (curves of same length as initial series)
-#' @param getRefSeries Function to retrieve initial series (e.g. in stage 2 after series
-#' have been replaced by stage-1 medoids)
-#' @param nb_ref_curves How many reference series? (This number is known at this stage)
-#' @inheritParams claws
-#'
-#' @return A big.matrix of size K1 x L where L = data_length
-#'
-#' @export
-computeSynchrones = function(medoids, getRefSeries,
- nb_ref_curves, nb_series_per_chunk, ncores_clust=1,verbose=FALSE,parll=TRUE)
-{
-
-
-
-#TODO: si parll, getMedoids + serialization, pass only getMedoids to nodes
-# --> BOF... chaque node chargera tous les medoids (efficacité) :/ ==> faut que ça tienne en RAM
-#au pire :: C-ifier et charger medoids 1 by 1...
-
- #MIEUX :: medoids DOIT etre une big.matrix partagée !
-
- computeSynchronesChunk = function(indices)
- {