Function kmedoids::fastpam1[][src]

pub fn fastpam1<M, N>(
    mat: &M,
    mut med: &mut Vec<usize>,
    maxiter: usize
) -> (N, Vec<usize>, usize, usize) where
    N: NumAssignOps + Signed + Zero + PartialOrd + Copy + SafeAdd + Display,
    M: ArrayAdapter<N>, 

Run the FastPAM1 algorithm, which yields the same results as the original PAM.

This is faster than PAM, but slower than FasterPAM, and mostly of interest for academic reasons. Quality-wise, FasterPAM is not worse on average, but much faster.

This is the improved version from the journal version of the paper, which costs O(n²) per iteration to find the best swap.

  • type M - matrix data type such as ndarray::Array2 or kmedoids::arrayadapter::LowerTriangle
  • type N - number data type such as i32 or f64 (must be signed)
  • mat - a pairwise distance matrix
  • med - the list of medoids
  • maxiter - the maximum number of iterations allowed

returns a tuple containing:

  • the final loss
  • the final cluster assignment
  • the number of iterations needed
  • the number of swaps performed

Panics

  • panics when the dissimilarity matrix is not square
  • panics when k is 0 or larger than N

Example

Given a dissimilarity matrix of size 4 x 4, use:

let data = ndarray::arr2(&[[0,1,2,3],[1,0,4,5],[2,4,0,6],[3,5,6,0]]);
let mut meds = kmedoids::random_initialization(4, 2, &mut rand::thread_rng());
let (loss, assi, n_iter, n_swap) = kmedoids::fastpam1(&data, &mut meds, 100);
println!("Loss is: {}", loss);