const Cluster &KMeans::operator[](unsigned int u) const { if (__k == 0) { throw ZeroClustersEx(); } if (u >= __k) { throw DimensionalityMismatchEx(__k, u); } return *__clusters[u]; }
KMeans::KMeans(unsigned int dim, unsigned int k, std::string filename, unsigned int maxIter) : __dimensionality(dim), __k(k), __iFileName(filename), __maxIter(maxIter) { if (k == 0) throw ZeroClustersEx(); std::ifstream iFile(filename.c_str()); if (iFile.fail()) throw DataFileOpenEx(filename); iFile.close(); }
double Clustering::KMeans<k, dim>::computeDin() { try { if(clusterArr.size() == 0){ throw ZeroClustersEx(); } double result; for (int i = 0; i < clusterArr.size(); i++) { result += clusterArr[i].intraClusterDistance(); } //Din = result; return result; } catch(double){ return 0; } }
// class KMeans { // unsigned int __dimensionality; // unsigned int __k; // Cluster **__clusters; // Point **__initCentroids; // std::string __iFileName; // unsigned int __maxIter; // unsigned int __numIter; // unsigned int __numNonempty; // unsigned int __numMovesLastIter; // KMeans::KMeans(unsigned int dim, unsigned int k, std::string filename, unsigned int maxIter) { if (k==0) { throw ZeroClustersEx(); } std::ifstream inFile; inFile.open("filename"); if (!inFile) { throw DataFileOpenEx(filename); } __dimensionality = dim; __k = k; __iFileName = filename; __maxIter = maxIter; __numNonempty = 1; __numIter = 0; }
double Clustering::KMeans<k, dim>::computeDout() { try { if(clusterArr.size() == 0){ throw ZeroClustersEx(); } double result; for (int i = 0; i < clusterArr.size(); i++) { for (int j = 0; j < clusterArr.size(); j++) { result += interClusterDistance(clusterArr[i], clusterArr[j]); } } result /= 2; //Dout = result; return result; } catch(double){ return 0; } }