28 lines
542 B
Rust
28 lines
542 B
Rust
pub mod kmeans;
|
|
pub mod clusterable;
|
|
|
|
pub use kmeans::Kmeans;
|
|
pub use clusterable::Clusterable;
|
|
|
|
pub enum Error {
|
|
IterationsLimitExceeded,
|
|
}
|
|
|
|
pub fn kmeans<T: Clusterable>(centroids: Vec<T>, data: Vec<T>, max_iterations: usize)
|
|
-> Result<(Kmeans<T>, usize), Error> {
|
|
|
|
let mut kmeans = Kmeans::new(centroids, data);
|
|
|
|
for nb_iterations in 0..max_iterations {
|
|
|
|
let stable = kmeans.iterate();
|
|
|
|
if stable {
|
|
return Ok((kmeans, nb_iterations));
|
|
}
|
|
|
|
}
|
|
|
|
Err(Error::IterationsLimitExceeded)
|
|
}
|