public static void ReadFromXLS(string path) // Function for reading data from the file .xls { HSSFWorkbook hssfwb; using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read)) // Data2 { hssfwb = new HSSFWorkbook(file); } ISheet sheet = hssfwb.GetSheet("FirstList"); List <string> Elements = new List <string>(); int column = 1, Row = 1; countColumnData = 0; Elements.Clear(); for (column = 1; sheet.GetRow(0).GetCell(column) != null; column++) // подсчет количества колонок в файле, а также запись названия ЛП { List <Term> t = new List <Term>(); NameOfLinguisticVariables.Add(string.Format("{0: 0.0}", sheet.GetRow(0).GetCell(column))); LinguisticVariable LP = new LinguisticVariable(new Guid(), string.Format("{0: 0.0}", sheet.GetRow(0).GetCell(column)), t, 0, 1); //FKB.ListVar.Add(LP); countColumnData += 1; } if (counterFoRowDataFromFile == 0) { for (Row = 1; sheet.GetRow(Row) != null && sheet.GetRow(Row).GetCell(0) != null; Row++) // подсчет количества строк в файле { counterFoRowDataFromFile++; } } column = 1; ElementsMatrix = new double[counterFoRowDataFromFile, countColumnData]; for (int row = 1; row <= counterFoRowDataFromFile; row++) // запись построчно с файла данных в список ElementsMulti -MultiDimensionalVector- { MultiDimensionalVector h = new MultiDimensionalVector(); while (sheet.GetRow(row).GetCell(column) != null) { Elements.Add(string.Format("{0: 0.0}", sheet.GetRow(row).GetCell(column))); column += 1; } List <double> result = Elements.Select(x => double.Parse(x)).ToList(); int integer = 0; foreach (double x in result) { var newVector = x; h.Add(newVector); ElementsMatrix[row - 1, integer] = x; integer++; } ElementsMulti.Add(h); column = 1; Elements.Clear(); } ClusterCount = (counterFoRowDataFromFile / 2) + 3; if (ClusterCount > 10) { ClusterCount = 7; } }
public MultiDimensionalVector CalculateCentroid(Cluster cluster) //вычисление центроида для кластера и обновление значения центроида в кластере { MultiDimensionalVector centroid = new MultiDimensionalVector(); for (int i = 0; i < cluster.Centroid.Count; ++i) { centroid.Add(0.0); } if (cluster.Elements.Count > 0) { foreach (var e in cluster.Elements) { centroid = centroid + e; } centroid /= cluster.Elements.Count; cluster.Centroid = centroid; } else { centroid = this.Elements.ElementAt(rand.Next(Elements.Count - 1)); } return(centroid); }