Lol
This commit is contained in:
parent
14455d3693
commit
2d0ec8ceae
|
@ -4,6 +4,7 @@ version = "0.1.0"
|
|||
authors = ["Thomas Forgione <thomas@tforgione.fr>"]
|
||||
|
||||
[dependencies]
|
||||
rand = "*"
|
||||
|
||||
[[bin]]
|
||||
name = "example"
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
7.362969772457262 2.2292211784138405 blue
|
||||
7.561872618222036 3.4619500908356526 red
|
||||
3.9379822748704396 0.35795551057766106 green
|
|
@ -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
|
Binary file not shown.
After Width: | Height: | Size: 9.6 KiB |
|
@ -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
|
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
cd ..
|
||||
cargo run --release --bin example
|
||||
cd plot
|
||||
gnuplot plot.gpi
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue