/// <summary> /// Импорт матрицы из файла XML /// </summary> /// <param name="fileName"></param> public static MatrixCSR ImportFromXml(string fileName) { // передаем в конструктор тип класса XmlSerializer formatter = new XmlSerializer(typeof(MatrixCSR)); using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate)) { MatrixCSR data = (MatrixCSR)formatter.Deserialize(fs); return(data); } }
/// <summary> /// Возвращает матрицу в формате CSR /// </summary> /// <returns></returns> public async Task <MatrixCSR> ConvertMatrixToCsrFormat() { MatrixCSR matrixCsr = new MatrixCSR(); int numRows = await GetNumRowsAsync(); matrixCsr.NumRows = numRows; int numCols = await GetNumColsAsync(); matrixCsr.NumCols = numCols; List <double> listCsrValA = new List <double>(); List <int> listCsrColIndA = new List <int>(); int nnzElCounter = 0; for (int i = 0; i < matrixCsr.NumRows; i++) { matrixCsr.CsrRowPtrA[i] = nnzElCounter; double[] rowData = await GetRowAsync(i); for (int colIndex = 0; colIndex < rowData.Length; colIndex++) { if (rowData[colIndex] > double.Epsilon || rowData[colIndex] < -double.Epsilon) { listCsrValA.Add(rowData[colIndex]); listCsrColIndA.Add(colIndex); nnzElCounter++; } } } matrixCsr.CsrRowPtrA[numRows] = nnzElCounter; matrixCsr.CsrValA = listCsrValA.ToArray(); matrixCsr.CsrColIndA = listCsrColIndA.ToArray(); return(matrixCsr); }