@@ -21,7 +21,7 @@ class Point
21
21
22
22
for (int i = 0 ; i < (int )line.length (); i++)
23
23
{
24
- if ((48 <= int (line[i]) && int (line[i]) <= 57 ) || line[i] == ' .' )
24
+ if ((48 <= int (line[i]) && int (line[i]) <= 57 ) || line[i] == ' .' || line[i] == ' + ' || line[i] == ' - ' || line[i] == ' e ' )
25
25
{
26
26
tmp += line[i];
27
27
}
@@ -118,6 +118,7 @@ class KMeans
118
118
private:
119
119
int K, iters, dimensions, total_points;
120
120
vector<Cluster> clusters;
121
+ string output_dir;
121
122
122
123
void clearClusters ()
123
124
{
@@ -135,9 +136,11 @@ class KMeans
135
136
for (int i = 0 ; i < dimensions; i++)
136
137
{
137
138
sum += pow (clusters[0 ].getCentroidByPos (i) - point.getVal (i), 2.0 );
139
+ // sum += abs(clusters[0].getCentroidByPos(i) - point.getVal(i));
138
140
}
139
141
140
142
min_dist = sqrt (sum);
143
+ // min_dist = sum;
141
144
NearestClusterId = clusters[0 ].getId ();
142
145
143
146
for (int i = 1 ; i < K; i++)
@@ -148,9 +151,11 @@ class KMeans
148
151
for (int j = 0 ; j < dimensions; j++)
149
152
{
150
153
sum += pow (clusters[i].getCentroidByPos (j) - point.getVal (j), 2.0 );
154
+ // sum += abs(clusters[i].getCentroidByPos(j) - point.getVal(j));
151
155
}
152
156
153
157
dist = sqrt (sum);
158
+ // dist = sum;
154
159
155
160
if (dist < min_dist)
156
161
{
@@ -163,10 +168,11 @@ class KMeans
163
168
}
164
169
165
170
public:
166
- KMeans (int K, int iterations)
171
+ KMeans (int K, int iterations, string output_dir )
167
172
{
168
173
this ->K = K;
169
174
this ->iters = iterations;
175
+ this ->output_dir = output_dir;
170
176
}
171
177
172
178
void run (vector<Point> &all_points)
@@ -259,7 +265,7 @@ class KMeans
259
265
}
260
266
261
267
ofstream pointsFile;
262
- pointsFile.open (" points.txt" , ios::out);
268
+ pointsFile.open (output_dir + " / " + to_string (K) + " - points.txt" , ios::out);
263
269
264
270
for (int i = 0 ; i < total_points; i++)
265
271
{
@@ -270,7 +276,7 @@ class KMeans
270
276
271
277
// Write cluster centers to file
272
278
ofstream outfile;
273
- outfile.open (" clusters.txt" );
279
+ outfile.open (output_dir + " / " + to_string (K) + " - clusters.txt" );
274
280
if (outfile.is_open ())
275
281
{
276
282
for (int i = 0 ; i < K; i++)
@@ -295,13 +301,15 @@ class KMeans
295
301
296
302
int main (int argc, char **argv)
297
303
{
298
- // Need 2 arguments (except filename) to run, else exit
299
- if (argc != 3 )
304
+ // Need 3 arguments (except filename) to run, else exit
305
+ if (argc != 4 )
300
306
{
301
- cout << " Error: command-line argument count mismatch." ;
307
+ cout << " Error: command-line argument count mismatch.\n ./kmeans <INPUT> <K> <OUT-DIR> " << endl ;
302
308
return 1 ;
303
309
}
304
310
311
+ string output_dir = argv[3 ];
312
+
305
313
// Fetching number of clusters
306
314
int K = atoi (argv[2 ]);
307
315
@@ -325,7 +333,6 @@ int main(int argc, char **argv)
325
333
Point point (pointId, line);
326
334
all_points.push_back (point);
327
335
pointId++;
328
- cout << pointId << endl;
329
336
}
330
337
331
338
infile.close ();
@@ -342,7 +349,7 @@ int main(int argc, char **argv)
342
349
// Running K-Means Clustering
343
350
int iters = 100 ;
344
351
345
- KMeans kmeans (K, iters);
352
+ KMeans kmeans (K, iters, output_dir );
346
353
kmeans.run (all_points);
347
354
348
355
return 0 ;
0 commit comments