- DynMSC: best loss reported incorrectly if best k=2
- add minimum k parameter
- bump rayon version (no changes)
- add DynMSC with automatic cluster number selection
- move the check for numerical instability out of the loop in all the "faster" variants, as we do no longer do best-first
- bump rayon to 1.8, no changes
- bump byteorder to 1.5, no changes, in example only
- fix bug in silhouette evaluation for k > 2
- bumped rayon to 1.7, with no changes
- add CITATION.cff
- drop a leftover println, remove Display/Debug traits
- optimize marginally the MSC loss function computation
- add clustering by optimizing the Silhouette: PAMSIL
- add medoid silhouette
- add medoid silhouette clustering: PAMMEDSIL, FastMSC, FasterMSC
- another bug fix in PAM BUILD, which ignored the first object
- bug fix in swap where the first k points were ignored instead of the centers (Lars Lenssen)
- small bug fix in PAM BUILD (noticable for tiny data sets with large k only)
- return less than k centers in BUILD if the total deviation already is 0 (less than k unique points)
- documentation improvement and packaging improvements in Python bindings
- no changes in Rust, only in the Python API
- reorder branches slightly (Lars Lenssen)
- no major changes in Rust, only in the Python API
- API change: allow input and loss types to differ (e.g., u32 input, i64 loss -- loss must be signed)
- removed safe_add trait -- use a higher precision loss type instead
- requires specifying the loss data type
- code modularization and cleanups
- fix: do not fail for k=1, but return the expected result
- add: added Silhouette index for evaluation
- add: rand_fasterpam with shuffled processing order
- add: par_fasterpam with parallelization using rayon (Lars Lenssen)
- update reference with published journal version
- update dependency versions
- improve some issue with ArrayBase
- add Alternating algorithm for reference
- move bench.rs to benches/
- remove forgotten println in pam reference method
- improve ndarray adapter to accept views
- relax version dependencies slightly
- reordered the returned values by importance to end users
- add FastPAM1 (slower, but exact same result as PAM)
- add original PAM (much slower, for reference)
- PAM BUILD and SWAP independently
- allow use with different array types (ndarray, lower triangular in a vec)
- initial port to Rust of the core FasterPAM functionality
- first Rust program ever, hence there likely is room for improvement