pub mod kmeans; pub mod kmeansdata; pub mod cluster; pub mod test; pub use kmeans::Kmeans; pub use kmeansdata::KmeansData; pub use cluster::{Cluster, Clusterable}; pub enum Error { IterationsLimitExceeded, } pub fn kmeans(centroids: Vec, data: Vec, max_iterations: usize) -> Result<(Kmeans, usize), Error> { let mut kmeans = Kmeans::new(centroids, vec![data]); for nb_iterations in 0..max_iterations { let (new_kmeans, stable) = kmeans.next_iteration(); kmeans = new_kmeans; if stable { return Ok((kmeans, nb_iterations)); } } Err(Error::IterationsLimitExceeded) }