Lol
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
extern crate rand;
|
||||
extern crate generic_kmeans;
|
||||
|
||||
use std::fmt::{Display, Formatter, Result};
|
||||
|
||||
use std::fs::File;
|
||||
use rand::distributions::Range;
|
||||
use rand::distributions::normal::Normal;
|
||||
use generic_kmeans::{kmeans, Clusterable};
|
||||
|
||||
#[derive(PartialEq, Clone)]
|
||||
#[derive(PartialEq, Copy, Clone)]
|
||||
struct Vector2<T> {
|
||||
pub x: T,
|
||||
pub y: T,
|
||||
@@ -54,29 +57,52 @@ impl Clusterable for Vector2<f64> {
|
||||
|
||||
fn main() {
|
||||
|
||||
let elements = vec![
|
||||
Vector2::new(8.0, 3.0),
|
||||
Vector2::new(9.0, 3.0),
|
||||
Vector2::new(9.0, 2.0),
|
||||
Vector2::new(1.0, 8.0),
|
||||
Vector2::new(2.0, 9.0),
|
||||
Vector2::new(3.0, 8.0),
|
||||
use rand::distributions::IndependentSample;
|
||||
|
||||
let colors = vec![
|
||||
"blue",
|
||||
"red",
|
||||
"green",
|
||||
];
|
||||
|
||||
let initial = vec![
|
||||
Vector2::new(1.0, 10.0),
|
||||
Vector2::new(10.0, 0.0),
|
||||
];
|
||||
let range = Range::new(0.0, 10.0);
|
||||
let mut rng = rand::thread_rng();
|
||||
let cluster_number = 3;
|
||||
|
||||
let (clusters, nb_iterations) = kmeans(initial, elements, 1000).ok().unwrap();
|
||||
let mut centers = vec![];
|
||||
for _ in 0..cluster_number {
|
||||
let center = Vector2::new(range.ind_sample(&mut rng), range.ind_sample(&mut rng));
|
||||
centers.push((center, Normal::new(center.x, 0.5), Normal::new(center.y, 0.5)));
|
||||
}
|
||||
|
||||
let mut elements = vec![];
|
||||
|
||||
for &mut (_, x_rng, y_rng) in centers.iter_mut() {
|
||||
|
||||
for _ in 0..100 {
|
||||
elements.push(Vector2::new(x_rng.ind_sample(&mut rng), y_rng.ind_sample(&mut rng)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
let (clusters, nb_iterations) = kmeans(
|
||||
centers.iter().map(|x| x.clone().0).collect::<Vec<_>>(), elements, 100000).ok().unwrap();
|
||||
|
||||
println!("{}", nb_iterations);
|
||||
|
||||
for (index, cluster) in clusters.iter().enumerate() {
|
||||
println!("CLUSTER {}", index);
|
||||
let mut output = File::create("plot/dat.dat").unwrap();
|
||||
|
||||
for (cluster, color) in clusters.iter().zip(&colors) {
|
||||
for element in cluster {
|
||||
println!("\t{}", element);
|
||||
use std::io::Write;
|
||||
writeln!(output, "{} {} {}", element.x, element.y, color).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
let mut center_file = File::create("plot/centers.dat").unwrap();
|
||||
for (&(center, _, _), color) in centers.iter().zip(&colors) {
|
||||
use std::io::Write;
|
||||
writeln!(center_file, "{} {} {}", center.x, center.y, color).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user