private void ButtonBrowseDatasetFile_OnClick(object sender, RoutedEventArgs e) { var dlg = new Microsoft.Win32.OpenFileDialog { DefaultExt = ".csv", Filter = "CSV Files (*.csv)|*.csv" }; var result = dlg.ShowDialog(); if (result == true) { var fileName = dlg.FileName; var input = new Input(); datasetVectorsList = input.ReadfromCsv(fileName); textBoxDatasetInput.Text = fileName; logger.LogToProgram($"Inputed dataset vector with vector length: {datasetVectorsList.VectorsLength} and count: {datasetVectorsList.VectorsCount}"); if (textBoxQueryInput.Text == String.Empty) { logger.LogToProgram("Select query vector csv."); } else { logger.LogToProgram("Begin calculation."); } textBlockDatasetVectorLength.Text = $"Length: {datasetVectorsList.VectorsLength}"; textBlockDatasetVectorCount.Text = $"Count: {datasetVectorsList.VectorsCount}"; } }
public void Calculate(VectorsListModel queryVectorsList, VectorsListModel datasetVectorsList) { logger = new Logger(); logger.LogToProgram($"Started {EngineName} engine."); //Log to Program.txt //Thread for L1 logger.LogToProgram($"Starting {ImplementationL1} of {EngineName} engine."); new Thread(() => CalculateL1(queryVectorsList, datasetVectorsList) ).Start(); //Log to Program.txt //Thread for L2 logger.LogToProgram($"Starting {ImplementationL2} of {EngineName} engine."); new Thread(() => CalculateL2(queryVectorsList, datasetVectorsList) ).Start(); //Log to Program.txt //Thread for Hamming logger.LogToProgram($"Starting {ImplementationHamming} of {EngineName} engine."); new Thread(() => CalculateHamming(queryVectorsList, datasetVectorsList) ).Start(); }
public void StartCalculation(VectorsListModel queryVectorsList, VectorsListModel datasetVectorsList) { //TODO start calculations with each engine var simpleCalcilationEngine = new SimpleCalculationEngine(); simpleCalcilationEngine.Calculate(queryVectorsList, datasetVectorsList); }
public VectorsListModel GenerateVectorsModel(int vectorLength = 512, int count = 1024) { var vectorsList = new VectorsListModel(); vectorsList.Vectors = GenerateVectorsList(vectorLength, count); vectorsList.VectorsCount = count; vectorsList.VectorsLength = vectorLength; return(vectorsList); }
private void CalculateL2(VectorsListModel queryVectorsList, VectorsListModel datasetVectorsList) { const string implementationName = ImplementationL2; logger.ImplementationLogDelete(EngineName, implementationName); logger.LogToImplementation($"Started {implementationName} of {EngineName}.", EngineName, implementationName); var sumDoubles = new double[queryVectorsList.VectorsCount, datasetVectorsList.VectorsCount]; var timer = new Timer(); timer.Start(); foreach (var queryVector in queryVectorsList.Vectors) { foreach (var datasetVector in datasetVectorsList.Vectors) { var queryVectorIndex = queryVectorsList.Vectors.IndexOf(queryVector); var datasetVectorIndex = datasetVectorsList.Vectors.IndexOf(datasetVector); var pairTimer = new Timer(); pairTimer.Start(); var value = sumDoubles[queryVectorIndex, datasetVectorIndex] = CalculateL2(queryVector, datasetVector); var elapsedPair = pairTimer.Stop(); logger.LogToImplementation($"Calculated [{implementationName}] distance of rows: " + $"( {queryVectorIndex}, {datasetVectorIndex} )" + $" in {elapsedPair}ms: {value}.", EngineName, implementationName); } } var elapsed = timer.Stop(); logger.LogToImplementation($"Finished calculating {implementationName} of {EngineName} in {elapsed}ms.", EngineName, implementationName); var output = new Output(); output.WriteMatrixToCsv(sumDoubles, $"{implementationName}{EngineName}"); }
private void ButtonStartCalculation_OnClick(object sender, RoutedEventArgs e) { if (queryVectorsList != null && datasetVectorsList != null) { StartCalculator(); } else { var randomizer = new Randomizer(); if (queryVectorsList == null) { if (datasetVectorsList != null) { logger.LogToProgram("No query csv file was inputed, generating random with dataset csv's length and count."); queryVectorsList = randomizer.GenerateVectorsModel(datasetVectorsList.VectorsLength, datasetVectorsList.VectorsCount); } else { logger.LogToProgram("No query csv file was inputed, generating random with default length and count"); queryVectorsList = randomizer.GenerateVectorsModel(20, 20); //temporary small } } if (datasetVectorsList == null) { if (queryVectorsList != null) { logger.LogToProgram("No dataset csv file was inputed, generating random with query csv's length and count."); datasetVectorsList = randomizer.GenerateVectorsModel(queryVectorsList.VectorsLength, queryVectorsList.VectorsCount); } else { logger.LogToProgram("No dataset csv file was inputed, generating random with default length and count"); datasetVectorsList = randomizer.GenerateVectorsModel(20, 20); //temporary small } } StartCalculator(); } }
public VectorsListModel ReadfromCsv(string filePath) { var vectorsList = new VectorsListModel() { Vectors = new List <VectorModel>() }; using (TextReader fileReader = File.OpenText(filePath)) { var csv = new CsvReader(fileReader); csv.Configuration.HasHeaderRecord = false; var records = csv.GetRecords <VectorModel>(); //try to write every row into variable of VactorModel type foreach (var record in records) { vectorsList.Vectors.Add(record); } vectorsList.VectorsCount = vectorsList.Vectors.Count; vectorsList.VectorsLength = vectorsList.Vectors.First().Coordinates.Count; } return(vectorsList); }