[−][src]Function kmedoids::pam_swap
pub fn pam_swap<M, N>(
mat: &M,
med: &mut Vec<usize>,
maxiter: usize
) -> (N, Vec<usize>, usize, usize) where
N: NumAssignOps + Signed + Zero + PartialOrd + Copy + SafeAdd + Display,
M: ArrayAdapter<N>,
Implementation of the original PAM SWAP algorithm (no BUILD).
This is provided for academic reasons to see the performance difference. Quality-wise, FasterPAM is not worse on average, but much faster. FastPAM1 is supposed to do the same swaps, and find the same result, but faster.
- type
M
- matrix data type such asndarray::Array2
orkmedoids::arrayadapter::LowerTriangle
- type
N
- number data type such asi32
orf64
(must be signed) mat
- a pairwise distance matrixmed
- the list of medoidsmaxiter
- 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::pam_swap(&data, &mut meds, 100); println!("Loss is: {}", loss);