-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkmeans.php
More file actions
110 lines (65 loc) · 1.68 KB
/
kmeans.php
File metadata and controls
110 lines (65 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
Kmeans
*/
$arr = array();
for($i=0; $i<50; $i++){
$arr[$i] = array(rand(0,10),rand(0,10),rand(0,10));
/*
if($i%5)
$arr[$i] = array(1,2,3);
else
$arr[$i] = array(rand(0,10),rand(0,10),rand(0,10));
if($i%7)
$arr[$i] = array(1,rand(0,9),rand(0,9));
else
$arr[$i] = array(1,rand(2,6),rand(0,10));
if($i%3)
$arr[$i] = array(3,2,1);
else
$arr[$i] = array(2,rand(2,7),rand(0,10));
*/
}
//print_r($arr[0]);
$f = kmeans($arr);
//print_r($f);
// cluster assignment
$c = array();
$c2[1] =array();
$c2[2] =array();
foreach($f as $i => $v){
foreach($v as $j => $p){
if($i!=$j)
{
$c[$i][1] += $p==1?1:0;
$c[$i][2] += $p==0?1:0;
$c[$i][3] += $p==2?1:0;
$c[$i][4] += $p==3?1:0;
/* if(!in_array($i,$c2[$p>0?1:2])){
$c2[$p>0?1:2][]=$i;
}
if(!in_array($j,$c2[$p>0?1:2])){
$c2[$p>0?1:2][]=$j;
}
*/
}
}
}
echo "<pre>";
print_r($c);
function kmeans($arr){
$trans = array();
foreach($arr as $i => $v){
foreach($arr as $j => $p ){
$trans[$i][$j] = 0;
if($i!=$j)
$trans[$i][$j] = distance($arr[$i],$arr[$j]);
else
$trans[$i][$j] = 0;
}
}
return $trans;
// echo distance($arr[0],$arr[1]);
}
function distance($A, $B){
return sqrt(abs($A[0]-$B[0]) + abs($A[1]-$B[1]) + abs($A[2]-$B[2]));
}