From 2d0ec8ceae3c442d60f7fc765af93f974c279292 Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Fri, 16 Feb 2018 18:24:29 +0100 Subject: [PATCH] Lol --- Cargo.toml | 1 + plot/centers.dat | 3 + plot/dat.dat | 300 +++++++++++++++++++++++++++++++++++++++++++++++ plot/diagram.png | Bin 0 -> 9805 bytes plot/plot.gpi | 11 ++ plot/regen.sh | 5 + src/example.rs | 60 +++++++--- 7 files changed, 363 insertions(+), 17 deletions(-) create mode 100644 plot/centers.dat create mode 100644 plot/dat.dat create mode 100644 plot/diagram.png create mode 100644 plot/plot.gpi create mode 100755 plot/regen.sh diff --git a/Cargo.toml b/Cargo.toml index 17c5fd0..3ca39d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" authors = ["Thomas Forgione "] [dependencies] +rand = "*" [[bin]] name = "example" diff --git a/plot/centers.dat b/plot/centers.dat new file mode 100644 index 0000000..9e62446 --- /dev/null +++ b/plot/centers.dat @@ -0,0 +1,3 @@ +7.362969772457262 2.2292211784138405 blue +7.561872618222036 3.4619500908356526 red +3.9379822748704396 0.35795551057766106 green diff --git a/plot/dat.dat b/plot/dat.dat new file mode 100644 index 0000000..31dc24a --- /dev/null +++ b/plot/dat.dat @@ -0,0 +1,300 @@ +3.1722920796470753 -0.733279293053285 blue +3.167068508218321 0.10323154299065418 blue +3.103950084700323 0.23930517934518614 blue +3.3798146480806963 -0.1827565585954446 blue +2.978283637278063 0.06453933903045073 blue +3.6356181662397535 -0.4044583199837899 blue +2.95372747507819 0.374453759303532 blue +3.3920150133049254 -0.4190603852985506 blue +3.6094600800276067 -0.2144185251138886 red +2.7739400381261774 0.712059481698815 red +3.846841411138542 -0.4888722200579573 red +3.6637633637955247 -0.20523517320505846 red +3.502927671921002 -0.01739950379852473 red +3.570670098713616 -0.04271440668919613 red +4.258771306128453 -0.7638447827738868 red +3.9409335680538744 -0.34461733565342756 red +3.172851060943594 0.5155595500900624 red +3.3660242079847826 0.3176395813234718 red +3.882627446966355 -0.3755163859233328 red +3.258525363706499 0.4069846744870096 red +3.495556786207888 0.3994046031736014 red +3.507425251682668 0.37043602544443244 red +3.927449678905854 -0.12931373550029374 red +3.9401081984845097 -0.21366400121478335 red +3.998440026339032 -0.232044527944281 red +3.485801013529333 0.25181078736199886 red +3.817636850420355 -0.12783722608293957 red +3.480959460450858 0.3356245969338822 red +3.733075996312495 0.019096925850280277 red +4.146995700224781 -0.04460715552241867 red +3.579793889310732 0.5229615388110218 red +3.6484363281436494 0.6045383904999224 red +3.4003348878727695 0.79816498433734 red +3.8439726772185896 0.2756903935248908 red +2.8383760073987534 1.3882253053077225 red +3.592774371838402 0.6789321749560016 red +3.7674662297399286 0.2921517888999538 red +4.115608810992105 -0.07025695746073285 red +3.528690841064493 0.516424034979121 red +3.217234748563143 0.9442394356410887 red +4.131774238527101 -0.04224023552247741 red +3.561080757822947 0.4818635464029179 red +4.2408854028156755 -0.2450782482196694 red +3.6730022742656243 0.29741785124017694 red +4.034026334642208 0.1488231988663128 red +4.119128183686852 -0.1580794094811806 red +3.9753355044557983 0.39627299770817237 red +3.6732827650690103 0.8059859451506826 red +4.488509416398572 -0.1462499511423424 red +4.32661224091649 0.07139296218783381 red +3.613505127994868 0.8377964314698141 red +3.87153299037606 0.5812571966391673 red +3.9902303145964706 0.5859036858002181 red +4.362303526272025 -0.042013012245863846 red +4.134369220146103 0.03349891857151277 red +4.177740948577232 0.12358770141391692 red +3.9540793283557014 0.3356584069120508 red +4.401108898000167 -0.003114398045010347 red +3.498514749532378 0.8800866500487596 red +4.41301152664003 -0.027628861527589144 red +4.215618119197788 0.3840095817249771 red +3.5482423999839146 0.7632539555148093 red +3.6246636191468666 0.7301238699155173 red +4.130094170140202 0.3078994155838442 red +4.034092528846325 0.3317083678197986 red +3.8796159868011064 0.3997569887460371 red +4.219000990049526 0.26810755366819106 red +4.247938088992708 0.39267087884272767 red +3.8030383348439853 0.5663640405892496 red +4.015106218988656 0.2762165711361133 red +3.6998523298348918 1.073558644892152 red +4.756491100686767 -0.20007878482051766 red +4.57835590857826 0.5851382590935945 red +3.941012536283112 1.135248406562449 red +4.283375404221392 0.698265954177747 red +5.196520463690655 0.8269139783274901 red +4.587045998171549 0.9493130438890539 red +4.277924679227115 0.5999740967807994 red +4.79655404175757 -0.03468448586681655 red +4.350986448867171 0.3460195729412589 red +4.3535938869662685 0.42185514891968456 red +4.516734825818239 0.6399861627972976 red +4.577579986201398 0.2693246854906323 red +4.047085482678346 0.9438333498946828 red +4.530054468395934 0.8253339759171412 red +4.62730518036874 0.39979489250253814 red +4.333874585129452 0.4127800284367539 red +4.61684222466966 0.5302988833055177 red +4.725281756162216 0.5076632573165651 red +4.450184320080639 1.4068875202461746 red +4.58559612719457 0.42148197697475753 red +4.517186886807359 1.1835934496680203 red +4.28283274886123 0.8329269399680973 red +4.224190877954441 0.5405588945003291 red +3.7912279751660867 1.2939721795466221 red +3.9822079025333577 1.0351892011246622 red +4.199080672684683 0.5206542057383026 red +4.329610262190835 0.32290838658859233 red +4.3612270824589405 1.0268438488576352 red +4.520204476958637 1.4227425201993709 red +7.722136516021652 1.9470066555970975 red +7.4916746875072855 2.1180961930221773 red +6.504637622726477 2.61151640305994 red +7.177999201946461 2.6255334521727467 red +7.26910394349391 2.234788707898471 red +6.117168606550697 1.866392307558659 red +7.623229088939814 1.792731727437522 red +7.807723494032717 1.84200160683787 red +6.706556568713833 2.2612285132853485 red +6.967195552131049 2.501871065272528 red +7.175843899364814 0.8574262374353125 red +6.8750422920422904 1.2371567676668918 red +7.619809736193145 1.3103889429511164 red +5.953387500844007 2.755233188216527 red +7.723489084817691 1.9463428958783504 red +6.644063412274511 2.5586672455593362 red +7.733605889106188 2.079736410311278 red +7.510572393106473 2.2061220380991124 red +6.856216013634419 2.6544853108123023 red +6.6930033087268885 2.245099227226044 red +7.247942190451006 2.1627019434042754 red +7.741449214385919 2.182334922711081 red +6.746942537637999 1.9959361510642295 red +7.649143630640873 2.22441486698875 red +6.9358767615672035 1.485569780201074 red +7.113591869260028 2.2928004264536828 red +7.427120398051516 2.383864858715106 red +7.349659579825405 2.0949180923760453 red +6.395333641483336 1.7743677054052447 red +6.466838685136713 1.939393843109669 red +7.253548883412662 2.1030668375095667 red +8.07939042280926 2.04729205871798 red +7.548984251183588 1.5499638356328398 red +6.1032067830466215 2.838456614189033 red +7.098490045615251 1.8897716920941956 red +7.59862527364878 2.3456095485144837 red +7.6801188008605985 2.344753403464505 red +7.49670020820185 1.726529815379416 red +7.146293141419195 1.252784057975802 red +7.321579062344307 2.5070505017099913 red +6.798977581928631 2.8315301607072727 red +7.5570303896807625 1.5791506580459989 red +7.272672897968238 1.9990630354210432 red +7.515475563843841 1.762927204669434 red +7.824459641746373 2.1013238310168627 red +7.532377761687111 2.0904990744009906 red +6.4714917643178085 2.782633453745481 red +7.493513215157782 2.1060717676124643 red +7.130875386373429 2.561241884726998 red +7.1965107684319065 2.090188844246861 red +7.7937385851348395 2.257283846237026 red +7.641528665375075 1.4752990325524786 red +7.195530312258788 2.086730017606406 red +7.520649659019042 2.0002708025432363 red +7.902751665079369 2.2023323361646625 red +8.120404543041419 2.0665508009908136 red +6.415331460879512 1.68412961311886 red +7.364998983795844 1.4399331873149213 red +8.14234624185481 2.0750561226272866 red +7.1704254033423585 2.181982728843698 red +7.402057697660059 1.533038191027845 red +7.664029025362594 1.7820627943094123 red +7.669404374935257 1.8538765822930114 red +7.371627210148008 1.558805724375508 red +7.0511942299360495 2.3419639393047356 red +7.329465356185301 2.177923167701359 red +7.771413252571511 2.11242037492263 red +7.663725996090565 1.7126632923352003 red +7.397374912219294 2.399953582766828 red +7.399196915900515 1.5693121453666254 red +7.147337668439287 2.108371971884583 red +7.20952148595069 1.2275066517040163 red +7.500514079976969 2.2498592424305035 red +7.56327947368118 1.212640674473267 red +6.850697308173663 2.489187247297768 red +6.818838516960285 2.265360970377559 red +6.909640919530763 2.4401077434705067 red +6.654089805070571 2.8505331135797998 red +8.000114875345277 2.119595362298255 red +6.960334760381899 2.70748387546396 red +7.838299264896003 2.715157569111897 red +7.633463429101306 2.47314113739334 red +7.416688794086579 2.889935392036926 red +7.805609921172734 2.5989409709922384 red +7.539781828336027 2.9330292220419616 red +7.597116683779243 3.2260333749067014 red +8.466410885039707 2.7377320271447263 red +7.133556641250677 2.9471790306833077 red +7.769517340230654 2.7763025185765584 red +7.337931150414927 2.5522719526839173 red +7.74023489812714 3.065068199792865 red +7.683759543909188 2.364155681212309 red +7.571610243520974 2.4839540444329544 red +7.095520936370959 2.92914400483635 red +8.041128388484529 2.7894817375794916 red +7.144407268059606 2.9691452384737635 red +8.505593495433358 2.1466363274907447 red +8.632508392616 2.22257963053884 red +7.911123376257175 2.5213466516039627 red +7.6940185408964545 3.352293659663364 red +7.991456661120536 2.589987966181656 red +8.087698508849215 2.556181174894577 red +7.718150718475244 2.8094487856195003 red +7.47315392406206 3.4782308361876915 red +8.012813012736501 3.122791194321132 red +8.174108122697525 3.429234781425609 red +7.766161280844902 3.7561802057042244 red +7.263545882712765 3.860939909657454 red +8.096615450151507 3.445162969565429 red +6.80705612289653 3.695299133705912 red +7.787262071030116 3.0400121637120074 red +7.921825185220113 4.11562189496709 red +7.352488965852293 3.0962605817874653 red +8.130241325680757 3.12580170376337 red +7.23034764678279 3.647675952767801 red +6.767616299967328 4.5653279969715985 red +7.7395783849343465 3.869413921383619 red +8.158085116611321 2.971554554199345 red +8.07002060099343 2.821712503112572 red +7.062756873013518 3.589476422002454 red +7.677978837449784 3.223400111739516 red +7.494413355292032 3.257440270821772 red +8.288820117028758 3.292305271320214 red +7.649362000563177 4.271160426138838 red +7.616020117241795 3.95881434948141 red +7.195507257591824 3.9428433603688404 red +7.245687352457268 2.9363826343846484 red +7.588216917623389 3.3532148773495645 red +7.126858553632669 2.9739175202264714 red +7.983026848285219 3.824046212867809 red +7.475292436908247 3.323994322421076 red +7.936496484568236 3.4794162984228825 red +6.76205135484123 3.5843519824089682 red +7.426875937925392 4.038873122243772 red +8.21951306389346 3.6399123259998225 red +7.324026068271806 3.061370274841475 red +8.569032256116909 3.3329612438310345 red +7.318164533243619 3.069397489626727 red +6.958855114032112 3.280972206830141 red +8.692122242415982 3.6918095437918073 red +7.2383605768073185 4.266375385002773 red +7.370919915669186 3.7015685565455962 red +8.150362283646688 3.329309338393711 red +7.479996619904384 3.0546845699004916 red +7.906092072147054 3.876850938641441 red +7.180680249472975 3.9577888988740364 red +7.322190245719994 3.2826421528571625 red +7.255438971347838 3.513450999321192 red +8.317600496173556 4.034622634968662 red +7.88276796985749 2.7966518004810754 red +8.103899733693975 4.001561001136776 red +6.954538631721563 2.976496115773739 red +7.240396443716532 3.2846074175197377 red +7.5850349627285185 2.8942969475507017 red +7.287112882089894 3.216029227750091 red +7.623359140518172 2.9593967166439348 red +7.713574159860361 3.4895881829426822 red +7.025980576805368 3.6433631066041405 red +7.444754728796709 3.483957785955234 red +6.838126438683099 3.3484180783059685 red +7.263944759925077 2.9654682573147193 red +7.6315888677034645 3.2466591797995314 red +6.826319178392804 4.484284866115551 red +7.360383098198501 3.7990932090392033 red +8.094085099203799 3.836014940244799 red +7.321057251480907 3.174050781865412 red +7.549705399139268 2.5146338343626593 red +7.1448124339102765 3.9680523242145584 red +7.734875951386552 3.2714316107507564 red +9.675705035077282 3.1167373037722834 red +7.444144597466469 3.089028651011974 red +6.783074702273208 3.211128587952996 red +7.47683218710337 2.518766753491712 red +7.163021503821117 3.252526493441669 red +7.980469959385454 4.158922284653899 red +8.52415725815523 3.11232846252088 red +7.697640498922979 4.2285295178410545 red +7.979057752484617 3.772083324553033 red +7.129657086439503 4.270166790068663 red +7.751753583966503 3.793402426923823 red +7.962022594729247 3.557862833899373 red +7.860303846423593 3.179038118142694 red +7.594168785731357 3.6788496848681413 red +9.124385644351904 2.468503337895192 red +7.713454204203212 2.9490935786628114 red +6.978844559548216 3.0178337639638806 red +6.906575699777272 3.3487729496964964 red +7.581454792889804 4.080280777611024 red +7.769797486055793 3.568644324142498 red +7.514981043050376 3.1549995905568915 red +8.076143978924529 3.470220123136699 red +7.29875139666393 3.3347908360349003 red +8.625871616822147 3.10608064651563 red +7.017251111494703 3.781879721569966 red +7.228136277849404 2.9054637393699094 red +7.270449993677676 3.01328472629758 red +7.3710753704641245 3.5688528791612377 red +7.933270825676227 3.5624377469972264 red +7.471503469540416 3.202424426475704 red +6.741829988777134 3.7063692230617864 red diff --git a/plot/diagram.png b/plot/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0b334d10b98652817e8b4e2a81cc130f9fc6cb64 GIT binary patch literal 9805 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 V(n623;P(~K0i#2Ea(2_N{2w8U4N(99 literal 0 HcmV?d00001 diff --git a/plot/plot.gpi b/plot/plot.gpi new file mode 100644 index 0000000..2b39561 --- /dev/null +++ b/plot/plot.gpi @@ -0,0 +1,11 @@ +set terminal png size 1280,720 enhanced font "Sans,15" +set output "diagram.png" +set pointsize 3 +set xrange [0:10] +set yrange [0:10] +plot "< awk '{if($3 == \"red\") print}' dat.dat" u 1:2 t "red" pt 4, \ + "< awk '{if($3 == \"green\") print}' dat.dat" u 1:2 t "green" pt 4, \ + "< awk '{if($3 == \"blue\") print}' dat.dat" u 1:2 t "blue" pt 4, \ + "< awk '{if($3 == \"red\") print}' centers.dat" u 1:2 t "red" pt 7, \ + "< awk '{if($3 == \"green\") print}' centers.dat" u 1:2 t "green" pt 7, \ + "< awk '{if($3 == \"blue\") print}' centers.dat" u 1:2 t "blue" pt 7 diff --git a/plot/regen.sh b/plot/regen.sh new file mode 100755 index 0000000..1636408 --- /dev/null +++ b/plot/regen.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +cd .. +cargo run --release --bin example +cd plot +gnuplot plot.gpi diff --git a/src/example.rs b/src/example.rs index 6620720..a2ad4c4 100644 --- a/src/example.rs +++ b/src/example.rs @@ -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 { pub x: T, pub y: T, @@ -54,29 +57,52 @@ impl Clusterable for Vector2 { 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::>(), 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(); + } }